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, el uso de protocolos no cifrados como FTP estándar o comandos R expone datos sensibles a la intercepción y al ataque. 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 detalla cómo SCP y SFTP aprovechan el cifrado SSH para garantizar la integridad y confidencialidad de los datos durante el tránsito. Exploraremos las fortalezas y debilidades de cada protocolo, proporcionaremos ejemplos prácticos de línea de comandos y describiremos las mejores prácticas de seguridad críticas para una gestión segura de archivos.
Entendiendo los Fundamentos: SSH
Tanto SCP como SFTP utilizan SSH (que generalmente se ejecuta en el puerto 22) como la capa de transporte subyacente. Cuando se inicia una transferencia utilizando cualquiera de los protocolos, SSH primero establece un túnel seguro y cifrado entre el cliente y el servidor. Todos los datos, incluidas las credenciales de autenticación y el contenido del archivo, se transmiten a través de este túnel, lo que convierte a ambos métodos en alternativas altamente seguras a los protocolos de transferencia de archivos heredados.
Características clave proporcionadas por la base de SSH:
- Cifrado: Todos los datos se cifran de extremo a extremo.
- Autenticación: Admite tanto la autenticación por contraseña como la autenticación mediante pares de claves pública/privada, mucho más segura.
- Integridad: Utiliza el hash criptográfico para garantizar que los archivos no se modifiquen 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 scripting o automatización.
Características y Atributos de SCP
- Simplicidad: Utiliza una sintaxis muy similar al comando estándar de Unix
cp. - Velocidad: Generalmente más rápido que SFTP porque no requiere acuses de recibo interactivos ni configuración de sesión, solo depende del túnel SSH subyacente.
- No Interactivo: Una vez iniciado, la transferencia se ejecuta hasta su finalización sin la capacidad de gestionar la sesión o interrumpir el estado de la transferencia.
Comandos Prácticos de SCP
La sintaxis general para SCP es scp [opciones] [origen] [destino].
1. Copiar un Archivo del Servidor Local al Remoto
Para enviar un archivo local al directorio principal de un usuario remoto:
scp /ruta/al/archivo/local/archivo.txt usuario@host_remoto:/home/usuario/destino/
2. Copiar un Archivo del Sistema Remoto al Local
Para obtener un archivo del servidor a su directorio actual:
scp usuario@host_remoto:/var/log/system.log .
# Nota: El '.' indica el directorio local actual
3. Copiar un Directorio Completo (Recursivo)
Utilice la bandera -r (recursivo) para copiar directorios y todo su contenido:
scp -r /ruta/al/carpeta/local/ usuario@host_remoto:/data/backups/
4. Especificar un Puerto No Estándar
Si su demonio SSH se ejecuta en un puerto diferente al 22, utilice la bandera -P (observe la P mayúscula):
scp -P 2222 archivo_local.zip usuario@host_remoto:/tmp/
Nota sobre la Desaprobación de SCP: Aunque es muy útil, SCP se considera un protocolo heredado. Los sistemas modernos recomiendan cada vez más el uso de SFTP o Rsync sobre SSH debido a vulnerabilidades conocidas en el diseño del protocolo SCP, particularmente en relación con la manipulación de nombres de archivo.
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 un control detallado de la sesión, listado de archivos, eliminación, renombrado y creación de directorios, similar a una sesión FTP mejorada, pero totalmente segura.
Características y Atributos de SFTP
- Sesión Interactiva: Las transferencias ocurren dentro de una sesión de shell dedicada e interactiva.
- Robustez: Admite la búsqueda, reanudación y gestión de transferencias individuales dentro de la sesión.
- Gestión Completa: Permite listar (
ls), cambiar directorios (cd) y manipular archivos remotos y locales mediante comandos de sesión (put,get,lcd,lmkdir). - Seguridad: Altamente confiable y considerado el estándar para las transferencias de archivos seguras modernas.
Comandos Prácticos de SFTP
1. Iniciar una Conexión SFTP
Inicie una sesión interactiva al servidor remoto:
sftp usuario@host_remoto
Si utiliza un puerto específico:
sftp -P 2222 usuario@host_remoto
2. Comandos Interactivos de SFTP
Una vez conectado, opera por defecto en el entorno remoto. Utilice 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 |
Imprimir 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_sys@servidor_backup
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
Recuperando /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 de archivos interactivo (Con estado) |
| Caso de Uso | Transferencias rápidas de un solo archivo; scripting/automatización. | Transferencias complejas; gestión de directorios; sesiones interactivas. |
| Velocidad | Generalmente más rápido debido a una menor sobrecarga. | Ligeramente más lento debido a los apretones de manos interactivos. |
| Reanudación | Poco o nada de soporte. | Admite plenamente la reanudación de transferencias y la búsqueda. |
| Estado de Seguridad | Heredado (Algunas vulnerabilidades del protocolo). | Estándar moderno y robusto. |
Cuándo usar SCP: Use SCP cuando necesite la máxima velocidad para una transferencia de archivos simple y esté ejecutando el comando dentro de un script donde se prefiera la no interactividad.
Cuándo usar SFTP: Use SFTP para prácticamente todas las transferencias de archivos manuales, cuando necesite gestionar múltiples archivos, cambiar directorios o requiera robustez de sesión y funciones de seguridad modernas.
Mejores Prácticas para Transferencias de Archivos Seguras
Usar SCP o SFTP es solo el primer paso. Una configuración de seguridad adecuada en el servidor SSH es esencial para proteger el entorno remoto.
1. Priorizar la Autenticación con Claves SSH
La autenticación basada en contraseñas es vulnerable a ataques de fuerza bruta. Utilice siempre pares de claves SSH públicas/privadas para autenticar las transferencias de archivos. El uso de claves elimina el riesgo de compromiso de contraseñas durante transferencias automatizadas o manuales.
Generación de Claves (si es necesario):
ssh-keygen -t rsa -b 4096
Uso de 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 de Root
Nunca permita transferencias de archivos directas utilizando el usuario root. Las transferencias siempre deben realizarse mediante una cuenta de usuario dedicada y de bajo privilegio. Si se necesita acceso administrativo, los archivos se pueden mover a la ubicación apropiada después de la transferencia usando sudo localmente en la máquina remota.
3. Restringir el Acceso Usando ChrootDirectory (SFTP)
Para los sistemas que proporcionan acceso SFTP a usuarios externos o no confiables, implemente restricciones de ChrootDirectory dentro del archivo sshd_config. Esto bloquea al usuario SFTP en un directorio específico, impidiéndole navegar por el resto del sistema de archivos.
Fragmento de configuración de ejemplo en /etc/ssh/sshd_config:
Match User usuario_sftp_externo
ForceCommand internal-sftp
ChrootDirectory /var/sftp/%u
AllowTcpForwarding no
X11Forwarding no
4. Limitar Permisos
Asegúrese 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úrese de que no pueda eliminar archivos en /etc/config.
Conclusión
SSH proporciona la capa de seguridad esencial necesaria para operaciones remotas confiables. Si bien SCP sigue siendo una opción rápida y sencilla para copias mediante scripts, SFTP ofrece el conjunto de características superior, el control interactivo y la solidez moderna requeridos para una gestión integral de archivos. Al aprovechar la autenticación basada en claves y la configuración adecuada del lado del servidor, los administradores de sistemas pueden garantizar que sus transferencias de archivos no solo sean funcionales, sino totalmente seguras.