La mejor manera de copiar archivos con SCP en Linux y cuándo no usarlo
Para la mayoría, usa SCP estándar de OpenSSH 9.0 y superior: escribe scp como siempre y por debajo utiliza SFTP, más seguro y con mejor manejo de errores que el protocolo SCP antiguo. No necesitas cambiar hábitos, ganas compatibilidad con servidores actuales y mantienes sintaxis conocida.
Si necesitas reanudar una copia interrumpida, transferir solo lo que cambió o sincronizar carpetas grandes, elige rsync sobre SSH (rsync -avz -e ssh). Transmite por diferencias, muestra progreso, permite prueba en seco y borrado controlado en destino. En copias de varios GB o con miles de archivos pequeños la diferencia de tiempo y tráfico es medible.
Si es una copia puntual simple entre dos equipos que controlas, SCP clásico sigue siendo válido: un archivo o una carpeta con -r, sin daemon adicional y con una sola orden. Cuando el servidor remoto es antiguo y no ofrece subsistema SFTP, fuerza el modo legacy con scp -O.
Datos comprobados en septiembre de 2026.
Qué necesitas antes de empezar
OpenSSH 9.0 o superior en cliente y servidor. Comprueba con ssh -V y scp -V. Desde esa versión scp usa SFTP por defecto; en 8.x y anteriores usa el protocolo SCP. Si no puedes actualizar, contempla rsync o sftp.
Acceso SSH válido: usuario, nombre o IP del host y puerto. Por defecto 22, si es distinto añade -P 2222 en scp o -p 2222 en ssh. Verifica con ssh -p 2222 usuario@host antes de copiar.
Autenticación por clave recomendada. Genera con ssh-keygen -t ed25519 y copia con ssh-copy-id. Deja ~/.ssh con 700 y ~/.ssh/authorized_keys y claves privadas con 600; con 644 u 755 el servidor rechaza el login.
Conectividad y resolución de nombres. Haz ping host y ssh -v usuario@host para ver negociación. Si falla, revisa firewall, NAT y que sshd esté activo en destino con systemctl status sshd.
Espacio y permisos en origen y destino. Comprueba con df -h y ls -ld /ruta. Sin permiso de lectura en origen o escritura en destino la copia aborta aunque SSH conecte.
Métodos comparados para copiar archivos entre equipos por SSH
| Método | Sintaxis básica | Copia recursiva | Reanudación / delta | Preserva permisos/fechas | Puerto | Caso ideal |
|---|---|---|---|---|---|---|
| SCP (OpenSSH 9.0+ sobre SFTP) | scp archivo usuario@host:/ruta/ |
Sí, con -r |
No | Sí, con -p |
-P 2222 |
Copia puntual rápida entre dos hosts con SSH |
| SCP -O (protocolo legacy) | scp -O archivo usuario@host:/ruta/ |
Sí, con -r |
No | Sí, con -p |
-P 2222 |
Servidor sin subsistema SFTP o firmware antiguo |
| rsync sobre SSH | rsync -avz -e ssh origen/ usuario@host:/destino/ |
Sí, implícita | Sí | Sí, con -a |
-e "ssh -p 2222" |
Carpetas grandes, incremental y reanudable |
| SFTP interactivo | sftp -P 2222 usuario@host luego put/get |
Sí, con put -r / get -r |
No nativo | Sí, con -p |
-P 2222 |
Navegar, listar y copiar con control interactivo |
Método 1: SCP estándar (OpenSSH 9.0+ usa SFTP por debajo)
Subir un archivo local al remoto: scp /home/ana/foto.jpg ana@192.168.1.10:/home/ana/ . Bajar del remoto al local: scp ana@192.168.1.10:/home/ana/foto.jpg /home/ana/Descargas/ . Respeta el orden origen destino y los dos puntos tras el host remoto.
Carpeta completa: scp -r /home/ana/proyecto/ ana@192.168.1.10:/home/ana/proyecto/ . La barra final importa: con / copias el contenido; sin ella copias la carpeta contenedora. Usa -p para conservar permisos y fechas: scp -rp origen destino.
Puerto no estándar: scp -P 2222 archivo ana@host:/ruta/ . Nota la mayúscula: -P es puerto en scp, -p es preservar atributos. En ssh y rsync el puerto es -p minúscula dentro de -e.
Depura con scp -v archivo ana@host:/ruta/ para ver autenticación, host key y canal SFTP. Si ves subsystem request failed el servidor no tiene SFTP habilitado; valora scp -O o rsync.
Limitación honesta: SCP no reanuda, no envía solo diferencias y no verifica integridad más allá de lo que hace SSH. Si la red se corta a mitad de 20 GB, empieza de cero.
De local a remoto y de remoto a local con sintaxis correcta
La sintaxis es scp [opciones] origen destino. Local es ruta normal, remoto es usuario@host:/ruta/absoluta/o/relativa. El error más común es invertir origen y destino y sobrescribir el archivo equivocado.
- Subir archivo:
scp /home/ana/informe.pdf ana@203.0.113.10:/home/ana/docs/y verifica en remoto conssh ana@203.0.113.10 "ls -l /home/ana/docs/informe.pdf". - Bajar archivo:
scp ana@203.0.113.10:/var/log/app.log ./y comprueba en local conls -l ./app.log. - Subir carpeta preservando atributos:
scp -rp /home/ana/web/ ana@203.0.113.10:/srv/web/y valida conssh ana@203.0.113.10 "ls -l /srv/web/". - Bajar carpeta por puerto 2222:
scp -P 2222 -r ana@203.0.113.10:/home/ana/fotos/ ./fotos/y confirma tamaño condu -sh ./fotos. - Si aparece
No such file or directory, revisa comillas en rutas con espacios:scp "./mi foto.jpg" ana@host:"/home/ana/Mis Fotos/".
Método 2: SCP en modo legacy con -O
Fuerza el protocolo SCP original: scp -O archivo ana@host:/ruta/ . Úsalo solo cuando el servidor no ofrece SFTP. Lo ves con scp -v mostrando scp: protocol error o Subsystem sftp not found y en /etc/ssh/sshd_config sin Subsystem sftp.
Comando exacto para carpeta por puerto no estándar: scp -O -P 2222 -r /home/ana/app/ ana@192.0.2.5:/opt/app/ . Para depurar: scp -O -v archivo ana@host:/tmp/ y revisa debug1: Sending command: scp -v -t /tmp/.
Riesgos del protocolo antiguo: validación de nombres menos estricta, manejo de comodines en servidor y menor control de errores. En 2019 se documentaron vulnerabilidades de traversal y sobreescritura si el servidor es malicioso; SFTP aísla mejor cada operación.
Compatibilidad: clientes 9.0+ aún incluyen -O para interoperar con equipos embebidos, routers o sistemas sin sftp-server. Si controlas el servidor, mejor habilita Subsystem sftp /usr/lib/openssh/sftp-server y vuelve a scp sin -O.
No uses -O por defecto. Si funciona sin él, quédate sin él: tendrás mensajes de error más claros, mejor soporte de caracteres especiales y comportamiento consistente con sftp.
Método 3: rsync sobre SSH cuando SCP se queda corto
rsync copia por diferencias: si ya existe parte del árbol en destino, envía solo bloques cambiados. Ideal para backups, despliegues y fotos con miles de archivos.
Paso 1, prueba en seco: rsync -avzn --progress -e "ssh -p 2222" /home/ana/proyecto/ ana@host:/home/ana/proyecto/ . -n no copia, solo lista. Revisa qué enviaría.
Paso 2, copia real con compresión y permisos: rsync -avz --progress -e "ssh -p 2222" /home/ana/proyecto/ ana@host:/home/ana/proyecto/ . -a preserva permisos, fechas, enlaces y recursividad; -z comprime en tránsito; --progress muestra avance por archivo.
Paso 3, reanudar tras corte: repite la misma orden; rsync detecta lo ya copiado. Para archivos grandes interrumpidos añade --partial para conservar parciales.
Paso 4, espejar destino y borrar lo que ya no existe en origen (peligroso): rsync -av --delete -e ssh /origen/ ana@host:/destino/ . Usa antes --dry-run para evitar borrados no deseados.
Paso 5, limitar ancho de banda: --bwlimit=5000 limita a 5000 KB/s útil en enlaces saturados.
rsync no necesita demonio rsync si usas
-e ssh; cifra y autentica con SSH y decide qué bloques enviar comparando tamaños, fechas y checksums.
SCP entre dos remotos y alternativa con Windows sin servidor SSH
scp usuarioA@hostA:/ruta/origen usuarioB@hostB:/ruta/destino en OpenSSH 9.0+ pasa por tu equipo local por defecto, no copia directo entre remotos. Tu máquina hace de puente y el tráfico se cifra dos veces. Si tu ancho de banda es limitado, el cuello de botella eres tú. Alternativa eficiente: entra por SSH a uno de ellos y ejecuta desde allí scp o rsync hacia el otro, o usa rsync -avz -e ssh usuarioA@hostA:/origen/ usuarioB@hostB:/destino/ con ProxyJump.
Si el destino es Windows sin OpenSSH Server, scp no tiene dónde conectar. Opciones: instala OpenSSH Server en Windows desde Configuración > Aplicaciones > Características opcionales, abre el puerto 22 en Firewall y copia con scp -P 22 archivo usuarioWin@IP:/C:/Users/usuario/; o evita SSH y usa WinSCP en modo SFTP/SCP, o una carpeta compartida SMB y robocopy/rsync vía WSL. Para automatizar desde Linux hacia Windows, SMB con smbclient o unidad montada con cifs suele ser más estable que forzar SSH donde no existe.
Si no funciona: fallos frecuentes de SCP y SSH y cómo aislarlos
Permission denied (publickey,password): usuario mal escrito, clave no cargada o permisos laxos. Haz ssh -v usuario@host y verifica Offering public key. Corrige con chmod 700 ~/.ssh y chmod 600 ~/.ssh/id_ed25519 y ssh-copy-id usuario@host.
Connection refused / Timed out: sshd no escucha, puerto cerrado o firewall. Prueba ssh -p 2222 -v host y nc -vz host 2222. En remoto revisa sudo ss -tlnp | grep sshd y sudo systemctl status sshd y abre el puerto.
No such file or directory: ruta origen o destino mal escrita o sin comillas con espacios. Lista antes con ls -l /ruta/local y ssh usuario@host "ls -l '/ruta/remota'". Recuerda los dos puntos host: para destino remoto.
Host key verification failed: el host cambió de clave o hay suplantación. No borres a ciegas. Compara huella con ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub en el servidor. Si es legítimo, actualiza con ssh-keygen -R host.
Secuencia de descarte en 4 pasos: 1) ssh usuario@host "echo ok" confirma autenticación; 2) sftp -P 2222 usuario@host y ls valida subsistema SFTP; 3) scp -v archivo usuario@host:/tmp/ muestra canal y permisos; 4) si SFTP falla, prueba scp -O -v para confirmar si necesitas legacy o reparar Subsystem sftp en sshd_config.
Preguntas frecuentes sobre SCP y alternativas
1. ¿Qué banderas o parámetros se usan con SCP en Linux?
Las banderas más útiles son -P para definir un puerto distinto al 22, -r para copiar carpetas completas de forma recursiva, y -p para conservar permisos y tiempos de modificación. La opción -C activa la compresión de datos durante el envío, que puede acelerar la transferencia de archivos de texto en conexiones lentas.
2. ¿Cómo se usa SCP en Linux?
La sintaxis básica es scp [origen] [usuario]@[destino]:[ruta]. Para copiar un archivo local a un servidor remoto ejecuta algo como scp archivo.txt user@192.168.1.10:/home/user/. Es obligatorio tener acceso SSH configurado; de lo contrario, el sistema te pedirá la contraseña del usuario remoto para cada operación.
3. ¿Qué hace el comando SCP -i?
En realidad, la bandera -i no pertenece a SCP, sino a SSH. Se utiliza para especificar la ruta de un archivo de clave privada, por ejemplo: scp -i ~/.ssh/mi_llave archivo.txt user@host:/ruta/. Esto permite autenticarte sin contraseña si tu servidor está configurado para aceptar esa llave específica en su archivo authorized_keys.
4. ¿Cuáles son los parámetros principales del comando SCP?
Más allá de las banderas comunes, los parámetros clave incluyen -l para limitar el ancho de banda usado (útil en redes compartidas) y -v para el modo verboso, que muestra detalles de la conexión para depurar fallos. También puedes definir la compresión con -C o el cifrado con -c seguido del nombre del algoritmo.
5. ¿Cómo funciona SCP en sistemas Unix?
SCP utiliza el protocolo SSH (Secure Shell) para transferir datos de forma cifrada entre dos puntos. Aunque es una herramienta estándar en la mayoría de distribuciones Unix y Linux, muchos administradores prefieren SFTP para tareas complejas o rsync para sincronizaciones, ya que SCP no tiene una forma nativa de reanudar transferencias grandes si se cortan.
6. ¿Qué hago si el comando SCP me pide contraseña todo el tiempo?
Para evitar escribir la contraseña en cada ejecución, configura el acceso SSH por llaves públicas. Genera un par de llaves con ssh-keygen y transfiere la pública al servidor con ssh-copy-id user@host. Una vez instalada en el archivo authorized_keys, podrás copiar archivos sin intervención manual, ideal para automatizar respaldos con scripts.
7. ¿Cómo cambio el cifrado al usar SCP?
Puedes forzar un algoritmo de cifrado específico añadiendo la bandera -c seguida del nombre del cifrado deseado, por ejemplo: scp -c aes256-ctr archivo user@host:/ruta/. Si no especificas esta opción, SCP hereda la lista de cifrados del servidor SSH. Esto es útil si necesitas compatibilidad con sistemas antiguos o cumplir normativas de seguridad estrictas.
8. ¿Cómo uso SCP desde Windows para copiar archivos a Linux?
En Windows 10 y 11, SCP está integrado en PowerShell y el Símbolo del sistema como parte del cliente OpenSSH. La sintaxis es igual que en Linux: scp C:\ruta\archivo.txt user@192.168.1.50:/home/user/. Para transferir múltiples archivos o carpetas usa la bandera -r, que funciona exactamente igual que en sistemas Unix.
Fuentes
- Stackoverflowscp from Linux to Windows [closed] – Stack Overflowconsultado el 22/09/2026
- ZdnetHow to use the scp command in Linux – it's easier than you thinkconsultado el 22/09/2026
- RedhatOpenSSH SCP deprecation in RHEL 9: What you need to knowconsultado el 22/09/2026
- Kodekloudscp Command – Transfer Files to / from Linux Machines – KodeKloudconsultado el 22/09/2026
- Man7scp(1) – Linux manual page – man7.orgconsultado el 22/09/2026
