Transferencia de archivos: scp y rsync
Introducción
Linux ofrece herramientas de línea de comandos para copiar archivos entre máquinas de forma segura. scp (Secure Copy Protocol) es la opción más sencilla para transferencias puntuales. rsync es más potente: sincroniza directorios completos transfiriendo solo las diferencias, lo que lo hace ideal para backups y despliegues.
scp — Copia segura entre hosts
scp usa el protocolo SSH para cifrar la transferencia. Su sintaxis es similar a cp
pero admite rutas remotas en el formato usuario@host:/ruta.
Copiar un archivo local a un servidor remoto:
$ scp archivo.txt usuario@192.168.1.10:/home/usuario/
$ scp archivo.txt usuario@servidor:/tmp/
Copiar un archivo remoto al equipo local:
$ scp usuario@192.168.1.10:/var/log/syslog .
$ scp usuario@servidor:/etc/nginx/nginx.conf ~/backups/
Copiar un directorio completo (recursivo):
$ scp -r carpeta/ usuario@servidor:/home/usuario/
Opciones útiles:
-r→ recursivo (directorios)-P 2222→ puerto SSH alternativo (mayúscula)-i ~/.ssh/clave.pem→ usar clave privada específica-C→ comprimir durante la transferencia
$ scp -P 2222 -i ~/.ssh/id_rsa archivo.txt usuario@servidor:/tmp/
Copiar entre dos servidores remotos:
$ scp usuario@servidor1:/datos/archivo.txt usuario@servidor2:/destino/
rsync — Sincronización eficiente
rsync transfiere solo los bloques que han cambiado, ahorrando ancho de banda. Es la herramienta preferida
para backups incrementales y sincronización de directorios.
Sincronizar un directorio local:
$ rsync -av origen/ destino/
Sincronizar con un servidor remoto (vía SSH):
$ rsync -av carpeta/ usuario@servidor:/home/usuario/carpeta/
$ rsync -av usuario@servidor:/var/www/ /backup/www/
Opciones esenciales:
-
-a→ modo archivo: preserva permisos, fechas, propietario, enlaces simbólicos y recursivo -v→ verbose: muestra los archivos transferidos-z→ comprimir durante la transferencia-P→ muestra progreso y permite reanudar transferencias interrumpidas--delete→ elimina en destino los archivos que ya no existen en origen-
--dry-run→ simula sin hacer cambios (imprescindible antes de usar--delete) -e "ssh -p 2222"→ puerto SSH alternativo
Backup incremental típico:
$ rsync -avz --delete /datos/ usuario@servidor:/backup/datos/
Simulación antes de sincronizar:
$ rsync -av --dry-run --delete /datos/ usuario@servidor:/backup/datos/
Excluir archivos o directorios:
$ rsync -av --exclude="*.log" --exclude="tmp/" origen/ destino/
$ rsync -av --exclude-from=exclusiones.txt origen/ destino/
scp vs rsync: cuándo usar cada uno
- Usa
scppara copias puntuales de archivos individuales de forma rápida. -
Usa
rsynccuando necesitas sincronizar directorios, hacer backups o cuando el ancho de banda importa. -
rsynces más seguro en scripts porque con--dry-runpuedes verificar antes de ejecutar.