¿Cómo copio una carpeta de remoto a local usando scp? [cerrado]

2697

¿Cómo copio una carpeta del host remoto al host local scp?

Yo uso sshpara iniciar sesión en mi servidor.
Entonces, me gustaría copiar la carpeta remota fooa local /home/user/Desktop.

¿Cómo logro esto?

Slasengger
fuente
61
La pregunta del OP fue si es posible copiar el archivo del host remoto al host local mientras ssh'd al host remoto . No estoy seguro de por qué ninguna respuesta única ha respondido correctamente a su pregunta.
JeffDror
3
La premisa de la pregunta es incorrecta. La idea es, una vez que haya iniciado sesión en ssh, cómo mover los archivos desde la máquina que ha iniciado sesión de nuevo al cliente que está conectado. Sin embargo, scp no conoce ni puede usar la conexión ssh. Está haciendo sus propias conexiones. Entonces, la solución simple es crear una nueva ventana de terminal en la estación de trabajo local y ejecutar scp que transfiere archivos desde el servidor remoto a la máquina local. Por ejemplo, scp -i key user @ remote: / remote-dir / remote-file / local-dir / local-file
jeffmcneill el
12
La pregunta puede estar fuera de tema, pero también es la publicación mejor calificada en Google. Bloquearlo significa que nadie puede actualizarlo para proporcionar una mejor solución.
Alex Harvey
3
Recientemente hice una pregunta similar "un poco más profunda" con respecto a las líneas de comando para otra herramienta en SuperUser, y los mods allí la trasladaron a StackOverflow. De todos modos, estoy de acuerdo con la afirmación de los mods: ¿podemos MOVER esto a SuperUser, por favor, desbloquearlo y recibir más respuestas?
Nikhil VJ
3
En general, toda la reacción "fuera de tema" en stackoverflow es la falla más grande de la plataforma. Martinets demasiado celosos.
AdamC

Respuestas:

4943
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

Al no incluir el '/' final al final de foo, moverá el directorio en sí (incluidos los contenidos), en lugar de solo los contenidos del directorio.

De man scp(Ver manual en línea )

-r Copiar recursivamente directorios completos

Grifo
fuente
1412
Yo busco esto cada vez. Cómic relacionado: xkcd.com/1168
cptloop
10
Dos cosas agradables que encontré: la -Cbandera agrega compresión y la -cbandera te permite pasar otros tipos de cifrado para un mejor rendimiento, scp -c blowfish a@b:something . como se ve en la respuesta de dimuthu
Automatico
79
use -p para preservar los tiempos de modificación de archivos, permisos, etc. scp -pr user @ ...
Ber
27
Esta respuesta carece de una explicación importante. ¿Terminarás Desktop/fooo tendrás Desktop/allcontentsofFooGoherescp? Parece que a veces me parece extraño, hace una cosa y luego otra
Toskan
77
@Toskan scp -r [email protected]:/path/to/foo /home/user/Desktop/contigo debería terminar con Desktop/foo. With scp -r [email protected]:/path/to/foo/. /home/user/Desktop/ you terminará con el contenido de fooin Desktopy todos los subdirectorios de foostrewn underDesktop
Ioannis
307

Para usar toda la potencia de scp , debe seguir los siguientes pasos:

  1. Autorización de clave pública
  2. Crear alias ssh

Entonces, por ejemplo, si tiene este ~ / .ssh / config :

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

se ahorrará la entrada de contraseña y simplificará la sintaxis scp de esta manera:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

Además, podrá utilizar la finalización de ruta remota:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

Actualizar:

Para habilitar la finalización de bash remota, debe tener bash-shell en ambos <source>y en los <target>hosts, y trabajar correctamente la finalización de bash. Para obtener más información, consulte las preguntas relacionadas:

¿Cómo habilitar el autocompletado para rutas remotas cuando se usa scp?
Finalización de la pestaña de nombre de archivo SCP

Alexander Yancharuk
fuente
12
No sabía sobre el archivo de configuración, ¡esto es increíble!
dmastylo
La finalización de la pestaña no tiene sentido, solo se completa desde el host local para mí.
Bernhard
14
@ b.long La pregunta es "Cómo copiar una carpeta remota a un escritorio local". Mi respuesta es "scp -r prod: / path / foo / home / user / Desktop" . Espero que puedas ver las relaciones.
Alexander Yancharuk
2
@Bernhard Para mí fue obvio porque estoy usando bash-shell. Gracias por señalarme en eso! Respuesta actualizada
Alexander Yancharuk
1
@Alexander Yancharuk: Gracias por la respuesta, esto es más detallado que solo cubrir la sintaxis sola.
Gladiator
217

Para copiar todo desde la ubicación local a la ubicación remota (cargar)

scp -r /path/from/destination username@hostname:/path/to/destination

Para copiar todo desde la ubicación remota a local Ubicación (Descargar)

scp -r username@hostname:/path/from/destination /path/to/destination

Puerto personalizado donde xxxxestá el número de puerto personalizado

 scp -r -P xxxx username@hostname:/path/from/destination /path/to/destination

Copiar en el directorio actual de Remoto a Local

scp -r username@hostname:/path/from/file .

Ayuda:

  1. -r Copie recursivamente todos los directorios y archivos
  2. Utilice siempre la ubicación completa desde /, Obtenga la ubicación completa porpwd
  3. scp reemplazará todos los archivos existentes
  4. hostname será nombre de host o dirección IP
  5. si se necesita un puerto personalizado (además del puerto 22) use -P portnumber
  6. . (punto) : significa el directorio de trabajo actual, así que descargue / copie del servidor y péguelo aquí solo.

Nota: a veces el puerto personalizado no funcionará debido a que el puerto no está permitido en el firewall, así que asegúrese de que el puerto personalizado esté permitido en el firewall para la conexión entrante y saliente

Shiv Singh
fuente
1
Parece (al menos en versiones recientes de Raspbian Jessie y Ubuntu) que scp usa -P (P mayúscula) para el puerto, mientras que (curiosamente) ssh usa -p (minúscula).
Adam Plocher
-p está reservado para preservar "tiempos de modificación, tiempos de acceso y modos del archivo original". Entonces, si está usando eso para el puerto, probablemente no esté funcionando ;-) A menos que tenga una versión diferente que use la p minúscula de manera diferente.
Adam Plocher
Con ssh, sí. No con scp (supongo).
Adam Plocher
¿Qué debo poner si el directorio contiene un espacio?
Brethlosze
@hyprfrcb Use pwdpara obtener la ubicación y use la misma
Shiv Singh
48

Lo que siempre uso es:

scp -r username@IP:/path/to/server/source/folder/  .

. (punto) : significa current folder. así que copie del servidor y péguelo aquí solo.

IP : puede ser una dirección IP 125.55.41.311o puede ser un host como ns1.mysite.com.

Shrivastava Manish
fuente
99
¡Gracias por señalar que se .refiere al directorio actual!
ericmjl
35

Mejor comprimir primero el catálogo en el servidor remoto:

tar czfP backup.tar.gz /path/to/catalog

En segundo lugar, descargue desde el control remoto:

scp user@your.server.example.com:/path/to/backup.tar.gz .

Al final, extraiga los archivos:

tar -xzvf backup.tar.gz
justi
fuente
10
"Mejor" depende en gran medida de los datos que está transfiriendo y del esfuerzo que conlleva enviar ssh al servidor para comprimir / descomprimir. Y: puede agregar compresión a scp con la -Cbandera, como scp -C a@b:bigfile ..
Automático
44
¡Esto me recuerda el comentario hecho por @cptloop! : D xkcd.com/1168
GoodSp33d
22

Y si tiene una gran cantidad de archivos para descargar desde la ubicación remota y si no le importa mucho la seguridad, intente cambiar el cifrado predeterminado scp (Triple-DES) a algo como 'blowfish'.

Esto reducirá drásticamente el tiempo de copia de archivos.

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/
dimuthu
fuente
2
De acuerdo con esta publicación de blog , obtienes un rendimiento aún mejor arcfouren lugar de blowfish, pero tiene fallas de seguridad.
Automático
20

Escenario típico,

scp -r -P port username@ip:/path-to-folder  .

explicado con una muestra,

scp -r -P 27000 [email protected]:/tmp/hotel_dump .

dónde,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory
Arun G
fuente
Gracias por la respuesta. -P para un puerto SSH específico fue útil para mí.
redoff
19

Vaya a Archivos en su barra de herramientas de la unidad

ingrese la descripción de la imagen aquí

Presione Ctrl + l y escriba [email protected]

192.168.1.103 es el host que desea conectar.

El ejemplo aquí

ingrese la descripción de la imagen aquí

Ronald
fuente
12

La pregunta era cómo copiar una carpeta de remoto a local con scpcomando.

$ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

Pero esta es la mejor manera de hacerlo sftp: el Protocolo de transferencia de archivos SSH (también Protocolo seguro de transferencia de archivos o SFTP) es un protocolo de red que proporciona acceso a archivos, transferencia de archivos y administración de archivos a través de cualquier flujo de datos confiable (wikipedia).

$ sftp user_remote@remote_ip

sftp> cd /path/to/remoteDir

sftp> get -r remoteDir

Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

Para obtener ayuda sobre el sftpcomando simplemente escriba helpo ?.

Fulvio
fuente
12

En caso de que se encuentre con "Demasiadas fallas de autenticación" , especifique la clave SSH exacta que ha agregado al servidor ssh de su servidor:

scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
emperador
fuente
5

No sé por qué, pero tuve que usar la carpeta local antes de la directiva del servidor de origen. para que funcione

scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
Salem
fuente
1
Suponiendo que el usuario tuviera permisos, ¿podría hacer una ruta absoluta sin usarroot@
Jonathan