Dominando SCP: Transfiere Archivos de Forma Segura Entre Hosts Locales y Remotos

Aprende la sintaxis de scp para subidas seguras, descargas, copias recursivas, puertos SSH personalizados y preservación de atributos de archivos.

Dominando SCP: Transferir Archivos de Forma Segura entre Hosts Locales y Remotos

scp copia archivos entre máquinas a través de SSH. Es útil cuando necesitas una subida o descarga segura rápida y ya tienes acceso SSH al servidor.

Para trabajos de sincronización grandes, transferencias interrumpidas o despliegues repetidos, rsync suele ser una mejor herramienta. Para copias únicas y sencillas, scp es simple y está disponible en la mayoría de los sistemas tipo Unix.

Sintaxis Básica

scp [OPCIONES] ORIGEN DESTINO

Las rutas locales se ven como rutas de archivo normales. Las rutas remotas usan esta forma:

[usuario@]host:/ruta/al/archivo

Si omites usuario@, scp usa tu nombre de usuario local para el inicio de sesión SSH. Si el servidor SSH remoto usa un puerto no predeterminado, pasa -P con una P mayúscula. La -p minúscula significa preservar atributos de archivo.

Subir un Archivo

Para copiar un archivo local a un servidor remoto:

scp local_report.txt usuario_remoto@ejemplo_remoto.com:/home/usuario_remoto/documentos/

Esto envía local_report.txt desde tu directorio actual al directorio documentos remoto.

Para renombrar el archivo durante la subida, incluye el nombre de archivo de destino:

scp local_report.txt usuario_remoto@ejemplo_remoto.com:/home/usuario_remoto/documentos/reporte-2026.txt

Descargar un Archivo

Para copiar un archivo remoto a tu directorio local actual:

scp usuario_remoto@ejemplo_remoto.com:~/server_log.tar.gz .

Para guardarlo con un nombre local diferente:

scp usuario_remoto@ejemplo_remoto.com:~/server_log.tar.gz ./log-servidor-prod.tar.gz

Copiar un Directorio de Forma Recursiva

Usa -r para copiar un árbol de directorios:

scp -r carpeta_proyecto_local usuario_remoto@ejemplo_remoto.com:/var/www/

Esto copia el directorio y su contenido al destino. Ten en cuenta que scp -r sigue los enlaces simbólicos que encuentra durante el recorrido, lo que puede copiar más datos de los esperados.

Usar un Puerto SSH Personalizado

Si SSH escucha en el puerto 2222, usa -P mayúscula:

scp -P 2222 local_config.ini usuario@ejemplo_remoto.com:/tmp/

También puedes poner el puerto en tu configuración SSH y luego usar el alias del host:

Host prod-web
  HostName ejemplo_remoto.com
  User usuario
  Port 2222

Luego:

scp local_config.ini prod-web:/tmp/

Preservar Tiempos y Modos

Usa -p minúscula para preservar los tiempos de modificación, tiempos de acceso y bits de modo de archivo del origen:

scp -p script_importante.sh usuario@servidor:/tmp/

La propiedad generalmente no se preserva como ocurre con las herramientas de archivo. Si la propiedad es importante, establécela después de la transferencia o usa un proceso de despliegue diseñado para ese requisito.

Solucionar Problemas con Modo Verboso

Usa -v para ver detalles de la conexión SSH:

scp -v copia_seguridad_grande.zip usuario@servidor:/backups/

La salida verbosa ayuda a diagnosticar fallos de autenticación, problemas de configuración SSH, problemas con claves de host y puertos inesperados.

Habilitar Compresión Cuando Ayude

-C pasa la compresión SSH a la conexión:

scp -C logs.txt usuario@servidor:/tmp/

La compresión puede ayudar en enlaces más lentos con datos con mucho texto. Puede no ayudar mucho con archivos ya comprimidos como .zip, .gz, .jpg o .mp4.

Copiar entre Dos Hosts Remotos

Puedes usar scp con dos rutas remotas:

scp usuario_a@servidor_alpha:/data/db.sql usuario_b@servidor_beta:/backup/

En el scp actual de OpenSSH, las copias de remoto a remoto se transfieren a través de tu máquina local de forma predeterminada. Usa -R solo cuando quieras intencionalmente que el host de origen se conecte directamente al host de destino:

scp -R usuario_a@servidor_alpha:/data/db.sql usuario_b@servidor_beta:/backup/

Con -R, el host de origen debe poder autenticarse en el destino sin solicitar una contraseña.

Evitar Errores Comunes

Cita rutas remotas que contengan espacios:

scp "archivo local.txt" 'usuario@servidor:/tmp/archivo local.txt'

Usa rutas locales absolutas o claramente relativas cuando un nombre de archivo local contenga dos puntos, porque scp trata host:ruta como una ruta remota:

scp ./reporte:final.txt usuario@servidor:/tmp/

Verifica dos veces las rutas de destino antes de copiar como root o en directorios del sistema. scp sobrescribirá un archivo de destino existente sin preguntar en uso normal.

¿SCP o Rsync?

Usa scp para copias seguras simples:

  • Subir un archivo.
  • Descargar un archivo.
  • Copiar un directorio pequeño una vez.
  • Mover datos a través de un entorno solo SSH.

Usa rsync cuando necesites transferencias reanudables, sincronizaciones repetidas eficientes, manejo de eliminación, patrones de exclusión, sumas de verificación o mejores controles de progreso.

Conclusión

Usa scp origen destino para transferencias rápidas de archivos basadas en SSH. Agrega -r para directorios, -P para un puerto SSH personalizado, -p para preservar tiempos y modos, y -v cuando necesites solucionar problemas de la conexión SSH.