Copiar archivos mediante SSH: Guía completa de SCP, rsync y SFTP
SSH (Secure Shell) es la columna vertebral de la gestión segura de servidores remotos. Ya seas un desarrollador desplegando código, un administrador de sistemas gestionando infraestructura, o un usuario avanzado manteniendo un entorno de VPS Hosting, transferir archivos de forma segura entre máquinas es una tarea que realizarás constantemente.
Esta guía completa cubre todos los métodos principales para copiar archivos mediante SSH — incluyendo SCP, rsync, SFTP y automatización basada en claves — con sintaxis del mundo real, ejemplos prácticos y consejos de expertos para ayudarte a trabajar de forma más rápida y segura.
¿Por qué usar SSH para transferencias de archivos?
Antes de profundizar en las herramientas, vale la pena entender por qué la transferencia de archivos basada en SSH es el estándar de la industria tanto para administradores de servidores como para desarrolladores.
- Cifrado de extremo a extremo: Cada byte de datos — incluyendo credenciales, comandos y contenido de archivos — está cifrado en tránsito mediante algoritmos criptográficos modernos. Esto hace que las transferencias SSH sean inmunes al rastreo de paquetes y a los ataques de intermediario.
- No se requiere software adicional: SSH viene preinstalado en prácticamente todos los sistemas Linux/Unix y está disponible de forma nativa en Windows 10+ y macOS.
- Versatilidad: Una sola conexión SSH puede gestionar sesiones de shell interactivas, transferencias de archivos, reenvío de puertos y scripts automatizados.
- Compatible con la automatización: SSH se integra perfectamente con trabajos cron, pipelines CI/CD y scripts de copia de seguridad, permitiendo transferencias de archivos totalmente automatizadas y sin contraseña.
- Fiabilidad: Las conexiones SSH gestionan las interrupciones de red de forma elegante, especialmente cuando se combinan con herramientas como
rsync.
Método 1: Copiar archivos con SCP (Secure Copy Protocol)
SCP es la herramienta más sencilla y ampliamente utilizada para transferencias de archivos puntuales mediante SSH. Funciona aprovechando tu conexión SSH existente para copiar archivos de forma segura entre hosts.
Sintaxis básica de SCP
scp [options] [source] [destination]Ejemplo 1: Subir un archivo desde la máquina local al servidor remoto
scp /path/to/local/file username@remote_host:/path/to/remote/destinationDesglose:
/path/to/local/file — el archivo que deseas transferir en tu máquina local
username@remote_host — tu nombre de usuario SSH y el nombre de host o dirección IP del servidor
/path/to/remote/destination — el directorio de destino o la ruta del archivo en el servidor remoto
Ejemplo 2: Descargar un archivo del servidor remoto a la máquina local
scp username@remote_host:/path/to/remote/file /path/to/local/destination
Simplemente invierte el origen y el destino para obtener un archivo del servidor en tu máquina local.
Ejemplo 3: Copiar un directorio completo de forma recursiva
scp -r /path/to/local/directory username@remote_host:/path/to/remote/destination
El indicador -r le indica a SCP que copie el directorio y todo su contenido de forma recursiva, incluyendo subdirectorios anidados.
Opciones útiles de SCP
Opción
Descripción
-P [port]
Especificar un puerto SSH personalizado (nota: mayúscula -P, a diferencia de la minúscula -p de SSH)
-C
Habilitar compresión para transferencias más rápidas en conexiones lentas
-i [identity_file]
Usar una clave privada SSH específica para la autenticación
-l [limit]
Limitar el uso de ancho de banda en Kbit/s
-q
Modo silencioso — suprime la salida de progreso
-v
Modo detallado — útil para depurar problemas de conexión
Cuándo usar SCP
SCP es ideal para transferencias de archivos rápidas y puntuales donde la simplicidad importa. No requiere configuración y funciona de inmediato en cualquier sistema con SSH instalado. Sin embargo, para directorios grandes o transferencias repetidas, rsync es una opción significativamente mejor.
Método 2: Copiar archivos con rsync
rsync es la elección de los profesionales para la sincronización y transferencia de archivos mediante SSH. Su característica estrella es la transferencia delta: en lugar de copiar archivos completos, rsync analiza el origen y el destino y transfiere únicamente las partes modificadas. Esto ahorra enormes cantidades de tiempo y ancho de banda cuando se trabaja con archivos o directorios grandes que se actualizan con frecuencia.
Sintaxis básica de rsync
rsync [options] [source] [destination]
Ejemplo 1: Subir un archivo desde la máquina local al servidor remoto
rsync -avz /path/to/local/file username@remote_host:/path/to/remote/destination
Ejemplo 2: Sincronizar un directorio completo con un servidor remoto
rsync -avz /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
> Importante: Observa la barra diagonal al final / después del directorio de origen. Con barra diagonal al final, rsync copia el *contenido* del directorio. Sin ella, rsync copia el directorio en sí como un subdirectorio del destino.
Ejemplo 3: Reflejar un directorio (eliminar archivos borrados del origen)
rsync -avz --delete /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
El indicador --delete garantiza que los archivos eliminados del origen también se eliminen del destino, manteniendo ambas ubicaciones perfectamente sincronizadas.
Ejemplo 4: Usar un puerto SSH personalizado
rsync -avz -e "ssh -p 2222" /path/to/local/directory/ username@remote_host:/path/to/remote/destination/
Opciones útiles de rsync
Opción
Descripción
-a
Modo archivo: preserva permisos, marcas de tiempo, enlaces simbólicos y propiedad
-v
Detallado: muestra el progreso archivo por archivo durante la transferencia
-z
Compresión: reduce los datos transferidos por la red
--delete
Elimina archivos en el destino que ya no existen en el origen
--progress
Muestra el progreso en tiempo real para cada archivo
--exclude
Excluir archivos o patrones específicos (p. ej., --exclude '*.log')
-n o --dry-run
Simular la transferencia sin copiar nada realmente
-e "ssh -p [port]"
Especificar un puerto SSH personalizado
--bwlimit=[KB/s]
Limitar la velocidad de transferencia para evitar saturar tu conexión
Cuándo usar rsync
Usa rsync para copias de seguridad, despliegues y cualquier tarea de sincronización recurrente. Es especialmente potente cuando se gestionan grandes bases de código, bibliotecas multimedia o exportaciones de bases de datos en un Servidor Dedicado donde la eficiencia del ancho de banda y la integridad de los datos son críticas.
Método 3: Copiar archivos entre dos servidores remotos
Una capacidad menos conocida pero extremadamente útil tanto de SCP como de rsync es la posibilidad de transferir archivos directamente entre dos servidores remotos — sin enrutar los datos a través de tu máquina local. Esto es invaluable cuando se migran servidores o se sincronizan datos entre instancias en la nube.
Copiar archivos entre dos servidores remotos con SCP
scp username1@remote_host1:/path/to/file username2@remote_host2:/path/to/destination
Copiar archivos entre dos servidores remotos con rsync
rsync -avz username1@remote_host1:/path/to/source/ username2@remote_host2:/path/to/destination/
> Nota: Para que las transferencias de servidor a servidor funcionen, el servidor de origen debe poder establecer una conexión SSH con el servidor de destino. Es posible que necesites configurar claves SSH en el servidor de origen o usar el reenvío del agente SSH (ssh -A).
Transferencia de servidor a servidor mediante túnel SSH (método alternativo)
Si la conexión SSH directa entre servidores no es posible debido a restricciones del firewall, puedes canalizar la transferencia a través de tu máquina local usando tar y ssh:
ssh username1@remote_host1 "tar czf - /path/to/source" | ssh username2@remote_host2 "tar xzf - -C /path/to/destination"
Esto transmite un archivo comprimido desde el servidor 1 directamente al servidor 2 a través de tu sesión de terminal local.
Método 4: Copiar archivos con SFTP (SSH File Transfer Protocol)
SFTP proporciona una experiencia interactiva similar a FTP a través de una conexión SSH cifrada. A diferencia de SCP, que es una herramienta de un solo comando, SFTP abre una sesión persistente donde puedes explorar directorios, subir, descargar, renombrar y eliminar archivos de forma interactiva.
Iniciar una sesión SFTP
sftp username@remote_host
Accederás a un prompt de SFTP (sftp>), desde el cual puedes ejecutar los siguientes comandos:
Comandos esenciales de SFTP
Comando
Descripción
ls
Listar archivos en el directorio remoto actual
lls
Listar archivos en el directorio local actual
cd /remote/path
Cambiar el directorio remoto
lcd /local/path
Cambiar el directorio local
put /local/file /remote/destination
Subir un archivo al servidor remoto
get /remote/file /local/destination
Descargar un archivo del servidor remoto
mput *.txt
Subir múltiples archivos que coincidan con un patrón
mget *.log
Descargar múltiples archivos que coincidan con un patrón
mkdir /remote/newdir
Crear un directorio en el servidor remoto
rm /remote/file
Eliminar un archivo en el servidor remoto
exit o quit
Cerrar la sesión SFTP
Conectarse a un puerto SSH personalizado mediante SFTP
sftp -P 2222 username@remote_host
Cuándo usar SFTP
SFTP es más adecuado para sesiones interactivas de gestión de archivos — por ejemplo, cuando necesitas explorar una estructura de directorios remota, descargar selectivamente archivos de registro o subir archivos de configuración a un servidor web. Muchos clientes con interfaz gráfica (como FileZilla, Cyberduck y WinSCP) utilizan SFTP como protocolo subyacente, haciéndolo accesible también para usuarios no técnicos.
Método 5: Automatizar transferencias de archivos con autenticación por clave SSH
Introducir manualmente una contraseña para cada transferencia de archivos es ineficiente e incompatible con la automatización. La autenticación basada en claves SSH resuelve esto permitiendo inicios de sesión sin contraseña y criptográficamente seguros — un requisito previo para cualquier flujo de trabajo automatizado de copia de seguridad o despliegue.
Paso 1: Generar un par de claves SSH
En tu máquina local, ejecuta:
ssh-keygen -t ed25519 -C "your_email@example.com"
> Nota: ed25519 es el algoritmo moderno y recomendado. Usa -t rsa -b 4096 si necesitas compatibilidad con sistemas más antiguos.
Sigue las indicaciones para guardar la clave (ubicación predeterminada: ~/.ssh/id_ed25519) y opcionalmente establece una frase de contraseña para mayor seguridad.
Paso 2: Copiar tu clave pública al servidor remoto
ssh-copy-id username@remote_host
Esto añade tu clave pública al archivo ~/.ssh/authorized_keys en el servidor remoto. Se te pedirá tu contraseña por última vez.
Si ssh-copy-id no está disponible, puedes hacerlo manualmente:
cat ~/.ssh/id_ed25519.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Paso 3: Probar la autenticación sin contraseña
ssh username@remote_host
Si te conectas sin que se te solicite una contraseña, la autenticación basada en claves está funcionando correctamente.
Paso 4: Automatizar transferencias con un script de shell
Con SSH sin contraseña configurado, ahora puedes automatizar transferencias de archivos en trabajos cron o scripts:
#!/bin/bash
# Daily backup script
rsync -avz --delete /var/www/html/ username@backup_server:/backups/www/
Añade esto a tu crontab (crontab -e) para ejecutarlo cada noche:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Solución de problemas comunes en transferencias de archivos SSH
Incluso los administradores experimentados se encuentran con problemas. Aquí están los problemas más comunes y sus soluciones:
Permiso denegado (publickey)
Verifica que la clave pública esté correctamente añadida a ~/.ssh/authorized_keys en el servidor remoto
Comprueba que ~/.ssh tenga permisos 700 y authorized_keys tenga permisos 600PubkeyAuthentication yes en /etc/ssh/sshd_config)Conexión rechazada
- Verifica que el servicio SSH esté en ejecución:
systemctl status sshd - Comprueba que se esté usando el puerto correcto
- Revisa las reglas del firewall:
ufw statusoiptables -L
La velocidad de transferencia es lenta
- Habilita la compresión: añade
-Ca SCP o-za rsync - Usa un cifrado más rápido:
ssh -c aes128-ctr(menos seguro pero más rápido en enlaces de alta latencia) - Para transferencias grandes, considera
rsynccon--bwlimitpara evitar saturar tu red
Verificación de clave de host fallida
- La huella digital SSH del servidor remoto ha cambiado (podría indicar un problema de seguridad o una reconstrucción del servidor)
- Elimina la clave antigua:
ssh-keygen -R remote_host - Vuelve a conectarte y verifica la nueva huella digital antes de aceptarla
Elegir la herramienta correcta: SCP vs. rsync vs. SFTP
| Característica | SCP | rsync | SFTP |
|---|---|---|---|
| Facilidad de uso | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Transferencias delta | ❌ | ✅ | ❌ |
| Sincronización de directorios | ✅ (recursivo) | ✅ (con --delete) | ✅ (manual) |
| Modo interactivo | ❌ | ❌ | ✅ |
| Automatización | ✅ | ✅ | ✅ (con scripts) |
| Eficiencia de ancho de banda | Baja | Alta | Baja |
| Ideal para | Transferencias puntuales rápidas | Copias de seguridad y sincronización | Navegación interactiva |
Proteger tus transferencias de archivos SSH: mejores prácticas
Independientemente de la herramienta que uses, sigue estas mejores prácticas de seguridad para proteger tus servidores y datos:
- Deshabilita la autenticación por contraseña — Usa claves SSH exclusivamente y establece
PasswordAuthentication noen/etc/ssh/sshd_config - Cambia el puerto SSH predeterminado — Alejarse del puerto 22 reduce drásticamente los intentos automatizados de fuerza bruta
- Usa
fail2ban— Bloquea automáticamente las IPs que fallan repetidamente en la autenticación - Restringe el acceso SSH por IP — Usa reglas de firewall o directivas
AllowUserspara limitar quién puede conectarse - Mantén SSH actualizado — Actualiza OpenSSH regularmente para parchear vulnerabilidades conocidas
- Usa algoritmos de clave robustos — Prefiere
ed25519orsa-4096sobre algoritmos más antiguos y débiles - Protege tus aplicaciones web — Combina la seguridad SSH con un Certificado SSL para cifrar todo el tráfico hacia tus servicios web
Preguntas frecuentes
¿Cuál es la diferencia entre SCP y SFTP?
SCP es una herramienta de línea de comandos no interactiva diseñada para transferencias de archivos rápidas con un solo comando. SFTP es un protocolo interactivo que te permite explorar, gestionar, subir y descargar archivos en una interfaz basada en sesiones. Ambos usan SSH para el cifrado.
¿Puedo usar rsync sin SSH?
Sí — rsync tiene su propio modo demonio que opera sin SSH, pero es menos seguro. Para cualquier transferencia orientada a internet, usa siempre rsync sobre SSH (rsync -e ssh).
¿Cómo transfiero archivos si mi servidor usa un puerto SSH no estándar?
Usa el indicador -P con SCP (scp -P 2222) o la opción -e "ssh -p 2222" con rsync. Para SFTP, usa sftp -P 2222.
¿Está SCP obsoleto?
Los desarrolladores de OpenSSH han señalado que el protocolo subyacente de SCP tiene limitaciones y recomiendan usar SFTP o rsync para nuevos flujos de trabajo. Sin embargo, SCP sigue siendo ampliamente disponible y funcional en prácticamente todos los sistemas.
Conclusión
Dominar la transferencia de archivos basada en SSH es una habilidad esencial para cualquier persona que gestione servidores, despliegue aplicaciones o mantenga infraestructura remota. Cada herramienta tiene su lugar:
- SCP es tu opción para transferencias rápidas, sencillas y puntuales
- rsync es indispensable para copias de seguridad, despliegues y sincronización eficiente de grandes conjuntos de datos
- SFTP destaca en sesiones interactivas donde necesitas explorar y gestionar archivos sobre la marcha
Combinar estas herramientas con la autenticación por clave SSH y sólidas prácticas de seguridad te proporciona un flujo de trabajo de transferencia de archivos robusto, automatizado y seguro que escala desde una sola cuenta de Hosting Web Compartido hasta complejas arquitecturas de múltiples servidores en Servidores Dedicados.
Si buscas un entorno de hosting fiable y de alto rendimiento para poner en práctica estas habilidades, explora los planes de VPS Hosting de AlexHost — diseñados para desarrolladores y administradores de sistemas que exigen acceso root completo, almacenamiento SSD y conectividad de red de nivel empresarial.
