Transferencia de archivos a través de SSH [cerrado]

461

Estoy SSHing en un servidor remoto en la línea de comando, y estoy tratando de copiar un directorio en mi máquina local con el scpcomando. Sin embargo, el servidor remoto devuelve este mensaje de "uso":

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 [...] [[user@]host2:]file2
[Stewart:console/ebooks/discostat] jmm%

Me gustaría poder transferir archivos en ambas direcciones. Por lo que leí, pensé que el comando anterior funcionaría para descargar y scp -p [localpath] [remotepath]cargar.

langosta binaria
fuente

Respuestas:

735

Necesitas scpalgo en alguna parte. Lo has hecho scp ./styles/, por lo que estás diciendo copia segura ./styles/, pero no a dónde copiarla.

En general, si desea descargar, irá:

# download: remote -> local
scp user@remote_host:remote_file local_file 

donde local_filepodría haber un directorio para colocar el archivo que está copiando. Para cargar, es lo contrario:

# upload: local -> remote
scp local_file user@remote_host:remote_file

Si desea copiar un directorio completo, lo necesitará -r. Piense scpcomo igual cp, excepto que puede especificar un archivo con user@remote_host:filesolo archivos locales.

Editar: como se señaló en un comentario, si los nombres de usuario en los hosts locales y remotos son los mismos, entonces el usuario puede omitirse al especificar un archivo remoto.

lemnisca
fuente
2
Tenga en cuenta que si el usuario es el mismo en el host remoto y en el host local, se puede omitir el nombre de usuario: scp hello.c myserver.net:~/projects/
strager
Sí, es cierto, agregaré una nota al respecto. Incluí al usuario porque entonces los ejemplos que di siempre funcionarán. :)
lemnisca
Estoy teniendo dificultades en esto ... es esto correcto. scp C: \ filename.txt server1 @ server2: home
Vincent
Agregue formato en negrita en "donload" y "upload".
kursus
2
"naturalmente" (digo naturalmente porque acabo de perder 15 minutos en esto) no debe estar conectado al host remoto al intentar "descargar" a local, porque si está ejecutando el código desde una instancia remota, "local" ser interpretado como el "remoto", si entiendes lo que quiero decir. Así que no ejecutes ssh primero.
PatrickT
164

Si copia a / desde su máquina de escritorio, use WinSCP, o si está en Linux, Nautilus admite SCP a través de la opción Conectar al servidor.

scp solo puede copiar archivos a una máquina que ejecuta sshd, por lo tanto, debe ejecutar el software del cliente en la máquina remota desde la que está ejecutando scp.

Si está copiando en la línea de comando, use:

# copy from local machine to remote machine
scp localfile user@host:/path/to/whereyouwant/thefile

o

# copy from remote machine to local machine
scp user@host:/path/to/remotefile localfile
JeeBee
fuente
44
Tu eres el hombre. ¡Implementé un blog en menos de 10 segundos sin ninguna instalación adicional en el lado del servidor!
PM
2
Esto funcionó perfectamente. Usé msysgit en cmd ya que tiene tanto scp como ssh.
Ibn Saeed
3
Esto funcionó perfectamente. Usé scp * user @ host: / path / to / where
Bastin Robin
3
Esa debería ser la mejor respuesta.
gsamaras
3
Gracias por la sugerencia de WinSCP. Mucho más fácil que intentar escribir todos esos comandos manualmente ...
Brian Leishman
23

Debe especificar tanto el origen como el destino, y si desea copiar directorios debe buscar la opción -r.

Entonces, para copiar / home / usuario / lo que sea recursivamente desde el servidor remoto a su directorio actual:

scp -pr user@remoteserver:whatever .
Conocer
fuente
19

No, de todas scp [from] [to]formas necesitas copiar

La diferencia es que necesitas scp -p server:serverpath localpath

Gareth
fuente
8
¿Cuál es el propósito de -p?
Qinjie
1
Desde man scp: conserva los tiempos de modificación, los tiempos de acceso y los modos del archivo original.
pjmil
44
Para ser claros, -psolo se incluye aquí porque el OP incluyó la bandera en su pregunta original. No es de ninguna manera relevante para la respuesta
Gareth