SSH es el estándar de facto para administrar servidores y dispositivos de red de forma cifrada. Reemplazó a Telnet y rsh al aportar autenticación robusta, integridad de mensajes y confidencialidad sobre una sola conexión TCP (puerto 22).
Además de proveer terminales remotas, SSH permite copiar archivos (scp, sftp), reenviar puertos y automatizar tareas, por lo que se integra en despliegues, monitoreo y flujos DevOps.
Un cliente SSH inicia un saludo criptográfico con el servidor para negociar algoritmos, verificar la identidad del host mediante huellas digitales y establecer claves simétricas. A partir de ese momento, cada comando y respuesta viaja cifrado y protegido contra modificaciones.
El protocolo está especificado en la RFC 4251 y soporta versiones 1 y 2, aunque hoy se recomienda utilizar estrictamente SSHv2 por sus mejoras de seguridad.
SSH admite distintos mecanismos de autenticación:
| Método | Ventajas | Consideraciones |
|---|---|---|
| Contraseña | Fácil de desplegar en entornos pequeños. | Vulnerable a fuerza bruta; requiere políticas estrictas. |
| Clave pública | No transmite secretos por la red; ideal para automatización. | Debe protegerse la clave privada y rotarla periódicamente. |
| Certificados X.509 o SSH CA | Permiten expirar y revocar accesos centralmente. | Requieren infraestructura de autoridad certificadora. |
Las claves modernas se generan con algoritmos como Ed25519 o RSA de al menos 3072 bits. Su parte pública se instala en ~/.ssh/authorized_keys y puede limitarse a comandos o direcciones IP específicas.
SSH puede transportar otros protocolos mediante tres modalidades:
ssh -L 8080:intranet:80 usuario@jump).ssh -R 9000:localhost:1433 usuario@jump).ssh -D 1080 usuario@jump) para enrutar aplicaciones enteras.Estas capacidades son esenciales para acceder a bases de datos, paneles de administración o APIs internas sin exponerlos a Internet.
Un inicio de sesión interactivo luce así:
ssh usuario@192.168.0.10
The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established.
ED25519 key fingerprint is SHA256:abcd1234...
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.10' (ED25519) to the list of known hosts.
usuario@192.168.0.10's password:
[usuario@servidor ~]$ uname -a
La primera conexión solicita confirmar la huella digital del servidor para prevenir ataques de intermediario. Luego, el usuario recibe una shell remota lista para ejecutar comandos.
Windows 10+ incluye el cliente OpenSSH, por lo que se puede trabajar desde PowerShell sin instalar software adicional:
ssh-keygen -t ed25519 -f C:\Users\usuario\.ssh\id_ed25519 -C "usuario@equipo"
ssh -i C:\Users\usuario\.ssh\id_ed25519 `
-L 8080:intranet.local:80 `
admin@bastion.midominio.com
El primer comando genera un par de claves Ed25519; el segundo establece un túnel local 8080 hacia un servidor interno a través de un bastion. PowerShell también permite usar scp o sftp con la misma clave.
La biblioteca Paramiko facilita ejecutar comandos remotos o transferir archivos dentro de scripts:
import paramiko
host = "192.168.0.10"
usuario = "deploy"
clave = "C:/Users/deploy/.ssh/id_ed25519"
cliente = paramiko.SSHClient()
cliente.set_missing_host_key_policy(paramiko.AutoAddPolicy())
cliente.connect(hostname=host, username=usuario, key_filename=clave)
stdin, stdout, stderr = cliente.exec_command("systemctl status nginx")
print(stdout.read().decode())
cliente.close()
Paramiko respeta las mismas claves y algoritmos de OpenSSH, por lo que se integra en pipelines de despliegue continuo para ejecutar comandos o recopilar logs en serie.
El puerto predeterminado de SSH es el 22/TCP, aunque algunas organizaciones adoptan puertos alternativos para reducir el ruido de escáneres automáticos. La siguiente tabla resume configuraciones comunes:
| Configuración | Propósito |
|---|---|
| 22/TCP | Puerto estándar compatible con herramientas y firewalls. |
| 2022/TCP | Alternativa usada en bastiones o clusters para separar accesos. |
| Versión SSHv2 | Obligatoria para habilitar algoritmos modernos (ChaCha20, AES-GCM, Curve25519). |
Independientemente del puerto, se recomienda habilitar solo ciphers seguros, desactivar contraseñas si es posible y registrar intentos fallidos mediante herramientas como Fail2ban.
Mantener SSH protegido implica aplicar parches a OpenSSH, limitar usuarios permitidos, usar autenticación multifactor cuando esté disponible, habilitar AllowUsers o Match para separar roles,
y establecer registros detallados para auditoría. También es recomendable rotar claves y aprovechar agentes como ssh-agent para gestionar passphrases sin exponerlas.
Con estas medidas, SSH continúa siendo una pieza esencial para la administración remota y la automatización segura de infraestructuras modernas.