15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
28.10.2024

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/destination

Desglose:

    /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 600
  • Confirma que el demonio SSH permite la autenticación por clave (PubkeyAuthentication 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 status o iptables -L

    La velocidad de transferencia es lenta

    • Habilita la compresión: añade -C a SCP o -z a 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 rsync con --bwlimit para 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ísticaSCPrsyncSFTP
    Facilidad de uso⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
    Transferencias delta
    Sincronización de directorios✅ (recursivo)✅ (con --delete)✅ (manual)
    Modo interactivo
    Automatización✅ (con scripts)
    Eficiencia de ancho de bandaBajaAltaBaja
    Ideal paraTransferencias puntuales rápidasCopias de seguridad y sincronizaciónNavegació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:

    1. Deshabilita la autenticación por contraseña — Usa claves SSH exclusivamente y establece PasswordAuthentication no en /etc/ssh/sshd_config
    2. Cambia el puerto SSH predeterminado — Alejarse del puerto 22 reduce drásticamente los intentos automatizados de fuerza bruta
    3. Usa fail2ban — Bloquea automáticamente las IPs que fallan repetidamente en la autenticación
    4. Restringe el acceso SSH por IP — Usa reglas de firewall o directivas AllowUsers para limitar quién puede conectarse
    5. Mantén SSH actualizado — Actualiza OpenSSH regularmente para parchear vulnerabilidades conocidas
    6. Usa algoritmos de clave robustos — Prefiere ed25519 o rsa-4096 sobre algoritmos más antiguos y débiles
    7. 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.

    15%

    Ahorra 15%<\/span> en todos los servicios de hosting

    Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

    Usa el código:

    Skills
    Comenzar