Use scp para transferir un archivo del directorio local X al directorio remoto Y

He echado un vistazo a otras preguntas aquí y a varios tutoriales de «uso de scp» en Internet, pero no puedo resolver qué está mal.

Estoy usando Linux Mint y estoy tratando de averiguar cómo scp funciona.

Tengo un archivo file.ext (en mi computadora) en el directorio / home / name / dir /

Me conecto a una máquina remota que usa ssh , como:

ssh -p 2222 username@domain 

me pide la contraseña y el shell muestra:

username@domain ~ $ 

ahora, si emito el comando (antes de ejecutar ssh estaba en el directorio local / home / name / dir ):

scp -r -P 2222 file.ext username@domain 

salida es:

cp: cannot stat ‘file.ext’: No such file or directory 

El mismo resultado si en lugar de file.ext escribo la ruta completa

scp -r -P 2222 /home/name/dir/file.ext username@domain 

Además, el administrador del servidor me dijo que subiré el archivo a mi directorio de inicio remoto (en lugar de root), como:

scp -r -P 2222 file.ext username@domain:~/ 

pero cuando lo hago y presiono «Enter» no pasa nada, como si el shell estuviera esperando más datos.

Resumen de mis problemas:

  • cp: no existe tal archivo o directorio
  • shell «atascado» en ~ /

¿Alguna sugerencia?

Comentarios

  • Es ‘ poco claro si su problema es solo relacionado con estar en la máquina incorrecta … ¿podría prefijar cada comando con el host en el que está ejecutando? p.ej. localuser@machineA: ssh -p 2222 username@domain (para indicar que está ejecutando el comando ssh como localuser en machineA)
  • cuando usa scp, el El lado remoto siempre debe contener los dos puntos (por ejemplo, remotehost:/tmp), de lo contrario, solo hará una copia normal (scp /tmp/foo.txt example.com copiará /tmp/foo.txt en un archivo local example.com)
  • eliminará el -r, ya que no es necesario para copiar archivos individuales (‘ se usa para copiar directorios de forma recursiva )
  • ¿Está emitiendo el comando scp dentro de la sesión sshe ? Tendría sentido si estás en la máquina local.

Respuesta

Necesitas ejecutar scp comando desde la máquina local, no desde la remota. No necesita el ssh en absoluto:

dragonmnl@local $ scp -P 2222 file.ext username@domain:~/ 

Tampoco necesita el -r:

 -r Recursively copy entire directories. 

Si ya ha iniciado sesión en la máquina remota y desea copiar desde su local, debe hacer asegúrese de que su máquina local sea accesible a través de Internet y de que esté ssh configurada. No creo que esto sea lo que buscas, pero si lo es, simplemente ejecuta esto desde el control remoto:

username@domain $ scp dragonmnl@local:/path/to/file.ext ~/ 

Comentarios

  • gracias. El problema era que estaba intentando ejecutar scp dentro de la sesión ssh. ¡Ahora funciona!

Responder

Proporciono dos métodos para subir / bajar archivos entre la máquina local y remota (yo uso Mac air):

En este caso, quiero subir / bajar 11.jpeg entre local y remoto:

  1. Copiar archivos en servicio al directorio local: debe estar en la terminal bash local para ejecutar este comando, ¡no cuando esté en ssh!

    scp username@domain:/home/xxx/xxx/11.jpeg /Users/username/Desktop/ 

    copiar archivos en el directorio local a servicio remoto: también debe estar en el terminal bash local

    scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx 
  2. Para lograr la misma intención cuando inicia sesión en SSH , primero debe configurar » Preferencias del sistema > compartir > inicio de sesión remoto > todos los usuarios (no estoy seguro si debe configurar para » todos los usuarios «, pero funciona en esta situación) ”la Mac le dirá » Para iniciar sesión en esta computadora de forma remota, escriba:

    ssh username@xxxxxx, then type in the command below: scp username@domain:/home/xxx/xxx/11.jpeg username@xxxxxx:/Users/username/Desktop/** 

Este comando anterior es para descargar archivos de remoto a local cuando inicie sesión en ssh, simplemente cambie las dos rutas cuando desee cargar el archivo.

Comentarios

  • Finalmente, encuentro que Filezilla es probablemente el más conveniente en el trabajo diario ~~

Responder

Utilice el comando scp

Si desea transferir una carpeta, solo zip primero, podemos unzip luego.

Desde tu computadora, ejecuta esto:

$ scp your_path_to_the_file/the_file [email protected]:~/ 

Aquí, root es su cuenta y 10.145.198.100 es la dirección IP del servidor remoto. Vamos a copiar the_file a la carpeta ~/ en el control remoto.

Descomprimir el archivo:

$ unzip the_zip_file.zip -d destination_folder 

Comentarios

  • ¿Por qué root incluso tiene acceso SSH en la máquina remota? Eso ‘ es bastante inseguro. Es mejor usar un uso ordinario y luego sudo para hacer lo que tenga que hacer el root en esa máquina.

Respuesta

Si está ejecutando este comando scp en la máquina remota, está buscando file.ext como un archivo «local», es decir, en la máquina remota.

Para copiar un archivo de la máquina remota a la local, use scp -P 2222 username@domain:dir/file.ext localdir (asumiendo que file.ext está en ~/dir en la computadora remota, como en su ejemplo) . Si ejecuta scp en la máquina remota, invierta «local» y «remoto».

Comentarios

  • El OP quiere copiar de local a remoto, vea el título del OP ‘.
  • Vaya, supongo que ‘ tiene razón. Pero él ‘ aparentemente lo está haciendo al revés …

Responder

Solo una pequeña contribución, tal vez pueda ayudar a principiantes como yo: la ruta al directorio remoto debe escribirse así: username@domain:~/remote_directory

Lo que quiero resaltar aquí es que siempre debemos agregar que :~/

Respuesta

Solución para copiar archivos del cliente Linux al servidor Linux

  1. Verifique si sshd se está ejecutando en su servidor usando: ps aux | grep sshd

  2. De lo contrario, instale OpenSSH con sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

  3. Reinicie su servidor y verifique que sshd se esté ejecutando usando ps aux | grep sshd

  4. Si lo necesita, puede configurar su archivo /etc/ssh/sshd_config, pero no es necesario para configuraciones simples

  5. verifique que th Los puertos se abren usando netcat: nc -v -z 127.0.0.1 22

  6. Para copiar archivos desde un Linux cliente a Linux cliente use scp de la siguiente manera scp ~/filename.md [email protected]:~/folder/filename.md

  7. Para verificar que el archivo se haya copiado, use ssh [email protected] y proporcione su contraseña.

Solución para copiar archivos del cliente Linux a Windows

  1. Hay varios clientes para ejecutar SSH servidores en Windows, como:

  2. Instale uno de los servidores anteriores y asegúrese de que el puerto 22 esté abierto usando

    netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=UDP localport=22 netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=UDP localport=22 
    netsh advfirewall firewall add rule name="SSH Port 22" dir=in action=allow protocol=TCP localport=22 netsh advfirewall firewall add rule name="SSH Port 22" dir=out action=allow protocol=TCP localport=22 
    netsh advfirewall set allprofiles state off 
  3. Comparaciones de estos servidores:

    Servidor SSH de Bitvise

    1. Proporciona casi un mensaje cmd nativo, powershell, autocompletado

    2. Proporciona capacidades adicionales para la personalización, si necesita un uso avanzado

    3. La personalización del usuario para necesidades simples es 0. Comencé a usarla en 2 minutos, después de haber pasado mucho tiempo tratando de hacer funcionar MobaSSH y OpenSSH.

    4. Para copiar archivos usando scp use: scp ~/filename.md [email protected]:/C/Users/username/filename.md

    5. Gratis para uso personal, $ 99 para uso profesional. Debido a tantas funciones y una gran integración, el precio vale la pena.

    MobaSSH:

    1. proporciona una shell en Windows donde comandos simples de Linux como ls, cp, find, etc., funciona, similar a MINGW64

    2. puede acceder a cmd y powershell directamente escribiendo cmd o powershell

    3. La compatibilidad con Unicode es deficiente. La codificación no es correcta. Por ejemplo, si intenta iniciar el intérprete Python, se bloqueará. Deberá cambiar la codificación manualmente usando ( https://stackoverflow.com/a/12834315/4752883 ): chcp 65001 set PYTHONIOENCONDING=utf-8 y luego inicie el indicador de Python

    4. Lo bueno de MobaSSH es que tiene una interfaz de usuario muy simple y scp y ssh y bien integrado. Por lo tanto, funcionará para casos de uso simples

    5. Para copiar archivos desde un cliente Linux a un servidor Windows que ejecute MobaSSH: use scp ~/filename.md [email protected]:/cygdrive/c/Users/username/filename.md Esto se debe a que MobaSSH se basa en Cygwin y sus unidades se asignan de la misma manera cygwin – s están mapeadas.

    Use VM de Microsoft con OpenSSHv6.7 instalado desde https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ , OpenSSHv6.7 ya está instalado.

    1. Tiene muchos errores y necesitará personalizarlo en gran medida.

    2. La finalización del comando no funciona

    3. Dejará espacios en blanco cuando mueva el cursor en la terminal

    4. Python no funciona

    5. Es posible que las versiones posteriores de OpenSSH lo hayan mejorado. Además, MS parece hacer que OpenSSH esté disponible a través de » Funciones opcionales » https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/

Responder

Si está en OSX …

Cuando intenté ejecutarlo con username @ local: / file_directory …

Recibí el siguiente error:

ssh: local: node name or service name not known 

Solución

En mi Mac tuve que hacer lo siguiente para configurar ssh local:

Preferencias del sistema -> Internet & Redes -> Compartir -> HABILITAR Inicio de sesión remoto

Esto proporcionó el nombre de usuario @ dirección IP.

Respuesta

Tuve el mismo problema hoy en MAC.

Escribe el siguiente comando:

scp /local-file-path/ /-remote-location-path/ 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *