Ejemplos de scp: copiar archivos y carpetas por SSH

Para subir un archivo, ejecuta scp file.txt user@server:/tmp/. Para descargar uno, ejecuta scp user@server:/tmp/file.txt .. Añade -r para copiar una carpeta y -P 2222 para otro puerto, con P mayúscula. Una ruta remota necesita los dos puntos, porque sin ellos scp trata el nombre como un archivo local.

Actualizada el . scp de OpenSSH 10.3 en macOS hacia OpenSSH 10.0 en Debian 13 en un contenedor desechable.

Ejemplos habituales

TareaComando
Subir un archivoscp report.pdf user@server:/tmp/
Descargar un archivoscp user@server:/tmp/report.pdf .
Descargar con otro nombrescp user@server:/tmp/report.pdf copy.pdf
Subir una carpetascp -r site user@server:/tmp/
Descargar el contenido de una carpetascp -r 'user@server:/tmp/site/*' dl/
Otro puertoscp -P 2222 file user@server:/tmp/
Usar una clave concretascp -i ~/.ssh/id_work file user@server:/tmp/
Conservar fechas y permisosscp -p file user@server:/tmp/
Limitar la velocidad, en Kbit/sscp -l 800 file user@server:/tmp/
Comprimirscp -C file user@server:/tmp/
A través de un jump hostscp -J user@jump file user@server:/tmp/

Una entrada Host en ~/.ssh/config también funciona aquí: scp file server:/tmp/. Consulta el archivo de configuración de SSH.

La fila con -J pasa por un servidor de salto. Para guardar esa ruta de una vez, consulta ProxyJump y servidores de salto.

Copiar una carpeta dos veces la anida

Si la carpeta de destino ya existe, scp -r mete la carpeta dentro. Con /tmp/site ya en el servidor, esto nos dio /tmp/site/site:

scp -r site user@server:/tmp/site

Así, una primera ejecución crea /tmp/site y una segunda crea /tmp/site/site. Para copiar una carpeta de forma repetida, usa mejor rsync.

Nombres con espacios

scp "my file.txt" "user@server:/tmp/my file.txt"

Esto funciona con el protocolo SFTP por defecto. Con el protocolo antiguo de -O, la misma línea falló con scp: ambiguous target, porque el lado remoto vuelve a leer el nombre. En ese caso, añade un segundo par de comillas:

scp -O "my file.txt" 'user@server:"/tmp/my file.txt"'

Entre dos servidores

scp -3 user@one:/tmp/file user@two:/tmp/

-3 envía los datos a través de tu máquina, así que ningún servidor necesita acceso al otro. Desde OpenSSH 8.7 es el comportamiento por defecto, así que la opción solo lo hace explícito. En nuestra prueba, una copia sin -3 también pasó por el cliente local.

Para que el primer servidor se conecte directamente con el segundo, usa -R:

scp -R user@one:/tmp/file user@two:/tmp/

El primer servidor tiene entonces que iniciar sesión en el segundo sin que se le pida nada, y ya debe conocer su clave de host. Si no, obtienes Host key verification failed., que fue lo que pasó en nuestra prueba.

-O: el protocolo heredado

Desde OpenSSH 9.0, scp usa el protocolo SFTP por defecto. Puedes verlo con scp -v, que imprime Sending subsystem: sftp. Con -O imprime Sending command: scp -v -t /tmp/.

scp -O file user@server:/tmp/

Necesitas -O cuando el otro lado no tiene el subsistema SFTP, como en algunos dispositivos embebidos. En ese caso, el error habitual es subsystem request failed on channel 0. Consulta la guía de ese error.

Lo que scp no hace

  • No continúa una transferencia interrumpida. Vuelve a ejecutarlo y empieza de nuevo.
  • No envía solo lo que cambió.

Para eso, usa rsync, o reget en sftp. Para una comparación completa, lee scp, SFTP y rsync comparados.

Preguntas

¿Cómo se copia una carpeta con scp?

Añade -r: scp -r carpeta user@server:/tmp/. Si la carpeta de destino ya existe, scp mete la carpeta dentro.

¿Cómo se usa scp con otro puerto?

Con -P mayúscula, por ejemplo scp -P 2222 file user@server:/tmp/. La -p minúscula, en cambio, conserva las fechas y los permisos.

¿Puede scp reanudar una transferencia interrumpida?

No. Si lo vuelves a ejecutar, empieza el archivo de cero. Usa rsync con --partial, o reget y reput dentro de sftp.

Fuentes

Más en SFTP y transferencia de archivos

Todas las guías