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


99

Eché un vistazo a otras preguntas aquí y a varios tutoriales de "uso de scp" en Internet, pero no puedo resolver lo que está mal.

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

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

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

ssh -p 2222 username@domain

me pide la contraseña y aparece el shell:

username@domain ~ $

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

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

la salida es:

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

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ía 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 información.

Resumen de mis problemas:

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

¿Alguna sugerencia?


no está claro si su problema solo está relacionado con estar en la máquina incorrecta ... ¿podría prefijar cada comando con el host en el que se está ejecutando? por ejemplo localuser@machineA: ssh -p 2222 username@domain(para indicar que está ejecutando el comando ssh como localizador en la máquina A)
umläute

1
cuando se utiliza scp, la distancia lateral siempre tiene que contener el colon (por ejemplo remotehost:/tmp), de lo que se acaba de hacer una copia simple ( scp /tmp/foo.txt example.comse copia /tmp/foo.txten un archivo local example.com)
Umlaute

elimine la -rmarca, ya que esto no es necesario para copiar archivos individuales (se usa para copiar directorios de forma recursiva )
umläute

¿Está emitiendo el comando scp dentro de la sesión sshe ? Tendría sentido si estás en la máquina local.
alexis

Respuestas:


119

Debe ejecutar el scpcomando desde la máquina local, no desde el control remoto. No necesitas nada sshen absoluto:

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

Tampoco necesitas -r:

 -r      Recursively copy entire directories.  

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

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

1
Gracias. el problema era que estaba intentando ejecutar scp dentro de la sesión ssh. ¡ahora funciona!
dragonmnl

28

Proporciono dos métodos de carga / descarga de archivos entre la máquina remota y local (uso Mac air):

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

1)

Copie archivos en servicio al directorio local: debe estar en la terminal bash local para realizar este comando, ¡no cuando está en ssh!

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

copie archivos en el directorio local al servicio remoto: también debe estar en la terminal bash local

scp /Users/username/Desktop/11.jpeg username@domain:/home/xxx/xxx
  1. 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 de si debe configurar" 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, luego escriba el comando a continuación:

    nombre de usuario scp @ dominio: /home/xxx/xxx/11.jpeg nombre de usuario @ xxxxxx: / Users / username / Desktop /

Este comando anterior es para descargar un archivo de remoto a local cuando inicia sesión en ssh. Simplemente cambie las dos rutas cuando desee cargar el archivo.


Finalmente, creo que Filezilla es probablemente el más conveniente en el trabajo diario ~~
maizer

5

Si está ejecutando este comando scp en la máquina remota, se busca file.extcomo 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(suponiendo que file.extesté en ~/dirla computadora remota, como en su ejemplo). Si ejecuta scpen la máquina remota, invierta "local" y "remoto".


1
El OP quiere copiar de local a remoto, ver el título del OP.
terdon

Vaya, supongo que tienes razón. Pero aparentemente lo está haciendo al revés ...
alexis

3

Usa el scpcomando

Si desea transferir una carpeta, solo zipprimero, podemos unziphacerlo más adelante.

Desde su computadora, ejecute esto:

$ scp your_path_to_the_file/the_file root@10.145.198.100:~/

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

Descomprimir archivo:

$ unzip the_zip_file.zip -d destination_folder

¿Por qué rootincluso tendría acceso SSH en la máquina remota? Eso es bastante inseguro. Es mejor usar un uso ordinario y luego sudohacer lo que la raíz tenga que hacer en esa máquina.
Kusalananda

1

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

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


0

Solución para copiar archivos de Linux clientaLinux Server

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

  2. Si no, instale OpenSSHusando sudo apt-get install openssh-server openssh-client https://www.tecmint.com/install-openssh-server-in-linux/

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

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

  5. verificar que los puertos estén abiertos usando netcat nc -v -z 127.0.0.1 22

  6. Para copiar archivos de un Linuxcliente a un Linuxcliente, use scp de la siguiente manera scp ~/filename.md username@10.22.33.45:~/folder/filename.md

  7. Para verificar que el archivo se ha copiado, use ssh username@10.22.33.45y proporcione su contraseña.

Solución para copiar archivos de Linux clientWindows

  1. Hay varios clientes para ejecutar servidores SSH en Windows, como OpenSSH desde MS

    MobaSSH

    Servidor Bitvise SSH

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

    netsh advfirewall firewall agregar nombre de regla = "SSH Port 22" dir = en acción = permitir protocolo = UDP localport = 22

    netsh advfirewall firewall agregar nombre de regla = "SSH Port 22" dir = out action = permitir protocolo = UDP localport = 22

    netsh advfirewall firewall agregar nombre de regla = "SSH Port 22" dir = en acción = permitir protocolo = TCP localport = 22

    netsh advfirewall firewall agregar nombre de regla = "SSH Port 22" dir = out action = permitir protocolo = TCP localport = 22

    netsh advfirewall desactiva el estado de todos los perfiles

  3. Comparaciones de estos servidores:

    Servidor Bitvise SSH

    1. Proporciona casi la cmdsolicitud nativa , powershellsolicitud, 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 trabajar en 2 minutos, después de haber pasado mucho tiempo tratando de llegar MobaSSHy OpenSSHtrabajar.

    4. Para copiar archivos usando scp use: scp ~/filename.md username@10.33.44.45:/C/Users/username/filename.md

    5. Gratis para uso personal, $ 99 para uso profesional. Debido a tantas características y gran integración, el precio bien vale la pena.

    MobaSSH:

    1. proporciona un shell Linux en ventanas donde los comandos de Linux simple tal como ls, cp, findetc trabajo, similar aMINGW64

    2. puede acceder cmdy powershelldirectamente escribiendo cmdo powershell

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

    4. Lo bueno de MobaSSH es que tiene una forma muy sencilla interfaz de usuario, y scpy sshe integrado también. Entonces funcionará para casos de uso simples

    5. Para copiar archivos de un Linuxcliente a un Windowsservidor en ejecución MobaSSH: use scp ~/filename.md username@10.33.44.45:/cygdrive/c/Users/username/filename.md Esto se debe a que MobaSSHse basa cygwiny sus unidades se asignan de la misma manera cygwinque se asignan las unidades -s.

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

    1. Es muy defectuoso, y tendrá que 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. Las versiones posteriores de OpenSSH pueden haber mejorado en él. Además, MS parece hacer que OpenSSH esté disponible a través de Optional Features https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/


-1

Si te encuentras en OSX ...

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

Tuve el siguiente error:

ssh: local: node name or service name not known

Solución

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

'Preferencias del sistema' -> 'Internet y redes' -> 'Compartir' -> ACTIVAR 'Inicio de sesión remoto'

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


-1

Tuve este mismo problema hoy en MAC.

Escriba el siguiente comando:

scp /local-file-path/ /-remote-location-path/
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.