¿Cómo Transferir Archivos de Forma Segura Usando SCP y SFTP con SSH?

Transfiere archivos de forma segura con SCP y SFTP sobre SSH, incluyendo comandos prácticos, autenticación mediante clave y controles de acceso del lado del servidor más seguros.

Cómo Transferir Archivos de Forma Segura Usando SCP y SFTP con SSH

Transferir archivos entre sistemas locales y remotos es un requisito fundamental de la administración de sistemas y el desarrollo. Sin embargo, usar protocolos no cifrados como FTP estándar o comandos R expone datos sensibles a la interceptación y ataques. El protocolo Secure Shell (SSH) proporciona dos métodos robustos y cifrados para la transferencia de archivos: el Protocolo de Copia Segura (SCP) y el Protocolo de Transferencia de Archivos SSH (SFTP).

Esta guía explica cuándo usar SCP, cuándo usar SFTP y cómo evitar los errores comunes que hacen que la transferencia segura de archivos sea menos segura en la práctica.

Entendiendo los Fundamentos: SSH

Tanto SCP como SFTP utilizan SSH (generalmente ejecutándose en el puerto 22) como capa de transporte subyacente. Cuando inicias una transferencia usando cualquiera de los dos protocolos, SSH primero establece un túnel seguro y cifrado entre el cliente y el servidor. Todos los datos, incluyendo las credenciales de autenticación y el contenido de los archivos, se transmiten a través de este túnel, haciendo que ambos métodos sean alternativas altamente seguras a los protocolos de transferencia de archivos heredados.

Características clave proporcionadas por la base de SSH:

  • Cifrado: Todos los datos están cifrados de extremo a extremo.
  • Autenticación: Soporta tanto la autenticación por contraseña como la autenticación por par de claves pública/privada, mucho más segura.
  • Integridad: Utiliza hash criptográfico para asegurar que los archivos no se alteren durante la transferencia.

Protocolo de Copia Segura (SCP)

SCP es un protocolo de red basado en el protocolo de copia remota (rcp) pero envuelto con la seguridad de SSH. Está diseñado para la simplicidad y la velocidad, lo que lo hace ideal para transferencias rápidas y no interactivas, especialmente en scripts o automatización.

Características y Atributos de SCP

  1. Simplicidad: Utiliza una sintaxis muy similar al comando estándar cp de Unix.
  2. Velocidad: A menudo es rápido para copias simples de una sola vez, aunque el rendimiento depende de la implementación de SSH, el cifrado, la red y el conjunto de archivos.
  3. No Interactivo: Una vez iniciada, la transferencia se ejecuta hasta completarse sin la posibilidad de gestionar la sesión o interrumpir el estado de la transferencia.

Comandos Prácticos de SCP

La sintaxis general de SCP es scp [opciones] [origen] [destino].

1. Copiar un Archivo del Sistema Local al Servidor Remoto

Para enviar un archivo local al directorio personal de un usuario remoto:

scp /ruta/al/archivo_local.txt usuario@host_remoto:/home/usuario/destino/

2. Copiar un Archivo del Sistema Remoto al Local

Para traer un archivo del servidor a tu directorio actual:

scp usuario@host_remoto:/var/log/system.log .
# Nota: El '.' indica el directorio local actual

3. Copiar un Directorio Completo (Recursivo)

Usa la bandera -r (recursiva) para copiar directorios y todo su contenido:

scp -r /ruta/a/carpeta/local/ usuario@host_remoto:/data/backups/

4. Especificar un Puerto No Estándar

Si tu demonio SSH se ejecuta en un puerto diferente al 22, usa la bandera -P (nota la P mayúscula):

scp -P 2222 archivo_local.zip usuario@host_remoto:/tmp/

Nota sobre SCP: El comportamiento tradicional del protocolo SCP tiene un historial de riesgos en el manejo de nombres de archivo y rutas. Algunos clientes modernos de OpenSSH usan SFTP internamente para scp por defecto, pero no todos los clientes o servidores se comportan de la misma manera. Para nuevos flujos de trabajo, prefiere SFTP o rsync sobre SSH a menos que necesites específicamente compatibilidad con SCP.

Protocolo de Transferencia de Archivos SSH (SFTP)

SFTP es un subsistema de SSH que proporciona un entorno interactivo más rico para la gestión de archivos. A diferencia de SCP, que es puramente una herramienta de copia, SFTP es un protocolo con estado que permite listar, eliminar, renombrar y crear directorios a través de la misma conexión protegida por SSH.

Características y Atributos de SFTP

  1. Sesión Interactiva: Las transferencias ocurren dentro de una sesión de shell interactiva dedicada.
  2. Robustez: Soporta búsqueda, reanudación y gestión de transferencias individuales dentro de la sesión.
  3. Gestión Completa: Permite listar (ls), cambiar directorios (cd) y manipular archivos remotos y locales usando comandos de sesión (put, get, lcd, lmkdir).
  4. Seguridad: Utiliza SSH para el transporte y es la mejor opción por defecto para transferencias interactivas modernas de archivos.

Comandos Prácticos de SFTP

1. Iniciar una Conexión SFTP

Inicia una sesión interactiva con el servidor remoto:

sftp usuario@host_remoto

Si usas un puerto específico:

sftp -P 2222 usuario@host_remoto

2. Comandos Interactivos de SFTP

Una vez conectado, operas en el entorno remoto por defecto. Usa comandos para gestionar transferencias y directorios:

Comando Descripción Ejemplo
ls Listar archivos remotos ls -l
cd Cambiar directorio remoto cd /var/www/html
put Subir archivo (Local a Remoto) put datos_locales.zip
get Descargar archivo (Remoto a Local) get copia_seguridad_servidor.tar.gz
lcd Cambiar directorio local lcd /Usuarios/yo/descargas
lpwd Mostrar directorio de trabajo local lpwd
mkdir Crear directorio remoto mkdir nuevo_proyecto
quit Salir de la sesión SFTP quit

Ejemplo: Subir y Descargar dentro de una Sesión SFTP

$ sftp admin_sistema@servidor_copias
sftp> cd /data/backups
sftp> lcd /home/local/informes
sftp> put informe_diario.csv  # Sube el archivo
Subiendo informe_diario.csv a /data/backups/informe_diario.csv
informe_diario.csv                                      100% 512KB   4.3MB/s   00:00    
sftp> get configuracion.yaml  # Descarga un archivo
Obteniendo /data/backups/configuracion.yaml a configuracion.yaml
configuracion.yaml                                    100% 20KB    1.1MB/s   00:00    
sftp> quit

SCP vs. SFTP: Elegir la Herramienta Correcta

Aunque ambos protocolos son seguros, sirven para diferentes necesidades operativas:

Característica Protocolo de Copia Segura (SCP) Protocolo de Transferencia de Archivos SSH (SFTP)
Mecanismo Protocolo de copia simple (No interactivo) Protocolo de gestión interactiva de archivos (Con estado)
Caso de Uso Transferencias rápidas de un solo archivo; scripts/automatización. Transferencias complejas; gestión de directorios; sesiones interactivas.
Velocidad A menudo bueno para copias simples. Generalmente lo suficientemente rápido, con más funciones de gestión de archivos.
Reanudación Limitada; usa otra herramienta para un comportamiento robusto de reanudación. Soporta operaciones de transferencia más controladas, pero el comportamiento de reanudación del cliente varía.
Estado de Seguridad Herramienta de compatibilidad; el protocolo tradicional tiene problemas de diseño. Mejor opción por defecto para transferencia gestionada de archivos sobre SSH.

Cuándo usar SCP: Usa SCP cuando necesites la máxima velocidad para una transferencia de archivos simple y estés ejecutando el comando dentro de un script donde se prefiera la no interactividad.

Cuándo usar SFTP: Usa SFTP para prácticamente todas las transferencias manuales de archivos, cuando necesites gestionar múltiples archivos, cambiar directorios o requieras robustez de sesión y características de seguridad modernas.

Mejores Prácticas para Transferencias Seguras de Archivos

Usar SCP o SFTP es solo el primer paso. La configuración de seguridad adecuada en el servidor SSH es esencial para proteger el entorno remoto.

1. Priorizar la Autenticación mediante Clave SSH

La autenticación basada en contraseña es vulnerable a ataques de fuerza bruta. Siempre usa pares de claves SSH pública/privada para autenticar las transferencias de archivos. El uso de claves elimina el riesgo de compromiso de la contraseña durante transferencias automatizadas o manuales.

Generar Claves (si es necesario):

ssh-keygen -t ed25519 -C "transferencia-archivos"

Usar una clave específica para la transferencia:

scp -i ~/.ssh/mi_clave_transferencia archivo.txt usuario@host_remoto:/tmp/
# o
sftp -i ~/.ssh/mi_clave_transferencia usuario@host_remoto

2. Deshabilitar el Inicio de Sesión como Root

Nunca permitas transferencias directas de archivos usando el usuario root. Las transferencias siempre deben ser realizadas por una cuenta de usuario dedicada y con pocos privilegios. Si se necesita acceso administrativo, los archivos se pueden mover a la ubicación adecuada después de la transferencia usando sudo localmente en la máquina remota.

3. Restringir el Acceso usando ChrootDirectory (SFTP)

Para sistemas que proporcionan acceso SFTP a usuarios externos o no confiables, implementa restricciones ChrootDirectory dentro del archivo sshd_config. Esto encierra al usuario SFTP en un directorio específico, impidiéndole navegar por el resto del sistema de archivos.

Ejemplo de configuración en /etc/ssh/sshd_config:

Match User usuario_sftp_externo
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. Limitar los Permisos

Asegúrate de que la cuenta de usuario utilizada para las transferencias solo tenga los permisos mínimos necesarios para su tarea (Principio de Mínimo Privilegio). Si un usuario solo necesita subir archivos a /data/uploads, asegúrate de que no pueda eliminar archivos en /etc/config.

Conclusión

Usa SFTP como opción predeterminada cuando necesites navegar, subir, descargar o gestionar archivos de forma interactiva. Usa SCP para casos simples de compatibilidad donde confíes en el servidor y entiendas el comportamiento del cliente. En ambos casos, combina el comando con claves SSH, cuentas con mínimos privilegios y permisos de directorio estrictos.