Comando scp en Linux

scp significa secure copy (copia segura). Copia archivos entre máquinas a través de SSH — cifrado, autenticado, y disponible en cualquier sistema con OpenSSH instalado.

Puedes copiar de local a remoto, de remoto a local, o entre dos servidores remotos. Utiliza la misma autenticación que SSH: contraseñas, claves, bastiones, todo funciona igual.

Desde OpenSSH 9.0, el comando scp usa el protocolo SFTP internamente. La sintaxis no ha cambiado. Si necesitas sincronizar directorios o reanudar transferencias interrumpidas, rsync es la mejor opción — al final del artículo hay una comparativa.

Contenido

  1. Sintaxis
  2. Copiar un archivo a un servidor remoto
  3. Copiar un archivo desde un servidor remoto
  4. Copiar un directorio recursivamente
  5. Copiar múltiples archivos
  6. Puerto SSH personalizado
  7. Autenticación con clave SSH
  8. Copiar entre dos servidores remotos
  9. Servidor de salto (Jump Host)
  10. Limitar el ancho de banda
  11. Preservar atributos del archivo
  12. Modo detallado
  13. Errores comunes
  14. scp vs rsync
  15. Ejemplos prácticos

Sintaxis

scp [opciones] origen destino

El origen o el destino (o ambos) pueden ser remotos, con el formato usuario@servidor:/ruta.

scp /archivo/local usuario@servidor:/ruta/remota
scp usuario@servidor:/archivo/remoto /ruta/local
scp usuario@servidor1:/ruta usuario@servidor2:/ruta

Copiar un archivo a un servidor remoto

scp /home/usuario/tabla.csv jane@servidor.ejemplo.com:/home/jane/

Copiar con un nombre de archivo específico en destino:

scp backup.tar.gz usuario@192.168.1.10:/home/usuario/backup-2026.tar.gz

Copiar usando un nombre de host:

scp nginx.conf usuario@web01.ejemplo.com:/etc/nginx/nginx.conf

Copiar un archivo desde un servidor remoto

scp usuario@192.168.1.10:/var/log/nginx/error.log .

El . lo copia al directorio actual. Para especificar un destino:

scp usuario@192.168.1.10:/var/log/nginx/error.log /tmp/error.log

Copiar un directorio recursivamente

Usa -r para copiar un directorio completo:

scp -r /var/www/html usuario@192.168.1.10:/var/www/

Descargar un directorio desde un servidor remoto:

scp -r usuario@192.168.1.10:/var/www/html /tmp/backup-sitio/

Copiar un directorio preservando los atributos de los archivos:

scp -rp directorio-origen usuario@servidor:/ruta/

-r copia recursivamente, -p preserva permisos y fechas.


Copiar múltiples archivos

Lista separada por espacios:

scp archivo1.txt archivo2.txt archivo3.txt usuario@servidor:/home/usuario/

Usando un comodín:

scp /home/usuario/*.txt jane@servidor.ejemplo.com:/home/jane/

Todos los archivos de un directorio:

scp /home/usuario/html/* jane@servidor.ejemplo.com:/home/jane/backup/

Puerto SSH personalizado

Usa -P (mayúscula) cuando SSH no está en el puerto 22:

scp -P 2222 backup.tar.gz usuario@192.168.1.10:/home/usuario/

Fíjate en la -P mayúscula. Es diferente al comando ssh, que usa -p minúscula.


Autenticación con clave SSH

Usa -i para especificar una clave privada:

scp -i ~/.ssh/id_ed25519 backup.tar.gz usuario@192.168.1.10:/home/usuario/

Si tienes varias claves y la que usas por defecto no coincide:

scp -i ~/.ssh/clave_deploy config.yml deploy@servidor.ejemplo.com:/app/config/

Para más información sobre la autenticación con claves SSH, ver Acceso SSH sin contraseña.


Copiar entre dos servidores remotos

Con scp puedes copiar archivos entre dos servidores remotos sin descargarlos antes a tu máquina local.

Si ambos servidores pueden comunicarse directamente entre sí:

scp jane@host.ejemplo.com:/home/jane/tabla.csv pete@host2.ejemplo.com:/home/pete/

Si los servidores están en redes separadas sin ruta entre ellos, usa -3 para enrutar la transferencia a través de tu máquina local:

scp -3 usuario@servidor1:/ruta/archivo usuario@servidor2:/ruta/destino/

El comando se ejecuta en tu máquina local, que debe tener acceso SSH a ambos servidores.


Servidor de salto (Jump Host / Bastión)

Usa -J para conectarte a través de un servidor bastión:

scp -J usuario@bastion.ejemplo.com archivo.txt usuario@servidor-interno:/home/usuario/

Esta es la forma moderna de llegar a servidores detrás de un firewall. Ver también Trucos de SSH.


Limitar el ancho de banda

Usa -l para limitar el ancho de banda en Kbits por segundo. Útil cuando se copian archivos grandes en un servidor con carga:

scp -l 8000 backup-grande.tar.gz usuario@192.168.1.10:/backups/

8000 Kbits/s equivale aproximadamente a 1 MB/s. Ajústalo según lo que tu servidor pueda ceder.

Combínalo con compresión (-C) para ahorrar datos en conexiones lentas:

scp -C archivo-grande.tar usuario@192.168.1.10:/backups/

Preservar atributos del archivo

La opción -p preserva las fechas de modificación, acceso y los permisos:

scp -p script.sh usuario@192.168.1.10:/usr/local/bin/

Sin -p, el archivo de destino tendrá la fecha actual y los permisos por defecto del umask.


Modo detallado para depuración

-v muestra qué está haciendo scp y la capa SSH:

scp -v backup.tar.gz usuario@192.168.1.10:/home/usuario/

Para más detalle:

scp -vv backup.tar.gz usuario@192.168.1.10:/home/usuario/

Errores comunes

Permission denied (Permiso denegado)

El usuario remoto no tiene acceso de escritura en el destino, o la clave SSH no está aceptada.

scp: /root/backup.tar.gz: Permission denied

Comprueba que el directorio destino sea escribible por ese usuario, y verifica que tu clave esté en ~/.ssh/authorized_keys en el servidor remoto.


Connection refused (Conexión rechazada)

SSH no está en ejecución, o el puerto es incorrecto.

ssh: connect to host 192.168.1.10 port 22: Connection refused

Comprueba que sshd esté corriendo: systemctl status sshd. Si usas un puerto personalizado, añade -P.


Host key verification failed (Verificación de clave fallida)

La huella digital del servidor ha cambiado — habitual después de reinstalar un servidor.

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Elimina la clave antigua de tu known_hosts:

ssh-keygen -R 192.168.1.10

Luego vuelve a conectarte y acepta la nueva huella.


No such file or directory (No existe el archivo o directorio)

La ruta de origen no existe, o el directorio de destino no existe en el servidor remoto.

scp: /home/usuario/faltante.txt: No such file or directory

Si el directorio destino no existe, créalo antes:

ssh usuario@192.168.1.10 'mkdir -p /home/usuario/nuevodirectorio'
scp archivo.txt usuario@192.168.1.10:/home/usuario/nuevodirectorio/

scp vs rsync

scp rsync
Copia archivos por SSH
Omite archivos sin cambios
Reanuda transferencias interrumpidas
Sincroniza borrados ✓ (con --delete)
Limitar ancho de banda ✓ (-l) ✓ (--bwlimit)
Preservar atributos ✓ (-p) ✓ (-a)
Simulación sin cambios ✓ (-n)

Usa scp cuando copias uno o varios archivos puntualmente. Usa rsync para sincronizar directorios, hacer copias de seguridad, o cuando las transferencias puedan interrumpirse.


Ejemplos prácticos

Copiar un volcado de base de datos con la fecha de hoy a un servidor de backup:

scp /var/backups/mysql/db-$(date +%F).sql usuario@backup01:/var/backups/mysql/

Copiar un archivo a múltiples servidores con un bucle:

for servidor in web01 web02 web03; do
    scp nginx.conf usuario@$servidor:/etc/nginx/nginx.conf
done

Copiar y borrar el origen si la copia fue exitosa:

for archivo in backup-*.tar.gz; do
    scp "$archivo" usuario@backup01:/backups/ && rm "$archivo"
done

Descargar logs que coincidan con un patrón de fecha:

scp 'usuario@web01:/var/log/nginx/access-2026-05-*.log' /tmp/logs/

Copiar con puerto personalizado, clave y límite de ancho de banda combinados:

scp -P 2222 -i ~/.ssh/clave_deploy -l 4000 app.conf deploy@192.168.1.10:/etc/app/

Copiar un directorio a través de un servidor de salto:

scp -J usuario@bastion.ejemplo.com -r /var/www/html usuario@interno:/var/www/

Mover un archivo entre dos servidores remotos enrutando por la máquina local:

scp -3 usuario@servidor1:/exports/datos.csv usuario@servidor2:/imports/

Artículos relacionados: rsync · Acceso SSH sin contraseña · Ejecutar comandos en servidor remoto por SSH

Publicado originalmente: 8 de junio de 2007 · Última actualización: 29 de mayo de 2026

Por: Guillermo Garron