La Guía Definitiva para la Gestión y Seguridad de Claves SSH
Secure Shell (SSH) es el protocolo estándar para administrar servidores Linux. Aunque se pueden usar contraseñas, las claves SSH proporcionan una alternativa significativamente más segura y conveniente. Sin embargo, gestionar estas claves correctamente, desde la generación hasta la rotación, es fundamental para mantener una postura de seguridad sólida.
Esta guía cubre todo lo que necesita saber sobre las claves SSH, desde la generación básica hasta las estrategias de gestión avanzadas.
1. Generación de Claves Seguras
El primer paso en la seguridad de SSH es elegir el algoritmo adecuado y generar un par de claves sólido.
Generador de Claves SSH en Línea
Si bien un generador de claves SSH en línea es conveniente para realizar pruebas o crear rápidamente un par de claves, nunca debe utilizar una herramienta web para las claves de producción. Genere siempre sus claves privadas localmente en su máquina para garantizar que nunca se transmitan a través de la red.
Constructor de Comandos ssh-keygen
La herramienta estándar para generar claves es ssh-keygen. Un constructor de comandos ssh-keygen puede ayudarle a elegir los mejores parámetros. Hoy en día, debería preferir Ed25519 sobre el antiguo RSA.
Comando recomendado para una clave moderna y segura:
ssh-keygen -t ed25519 -C "[email protected]"
Si debe utilizar RSA por compatibilidad con sistemas antiguos, asegúrese de que sea de al menos 4096 bits:
ssh-keygen -t rsa -b 4096
2. Gestión de Accesos: Formato Authorized_keys
El archivo authorized_keys, que normalmente se encuentra en ~/.ssh/, determina qué claves públicas pueden iniciar sesión como un usuario específico.
Formato Authorized_keys
Una sola entrada en el formato authorized_keys consta de tres partes:
- Opciones (Opcional): Restringen lo que puede hacer la clave (por ejemplo,
from="1.2.3.4",no-agent-forwarding). - Tipo de Clave: El algoritmo (por ejemplo,
ssh-ed25519ossh-rsa). - Datos de la Clave Pública: La clave real codificada en base64.
- Comentario (Opcional): Una etiqueta para identificar la clave (normalmente un correo electrónico o un nombre de host).
Ejemplo con una restricción:
from="192.168.1.0/24" ssh-ed25519 AAAAC3Nza... [email protected]
3. Verificación de Servidores: Formato Known_hosts
Mientras que authorized_keys es para la autenticación del cliente, el archivo known_hosts es para la autenticación del servidor. Le protege de los ataques de tipo Man-in-the-Middle (MITM).
Formato Known_hosts
El formato known_hosts asigna el nombre de host o la dirección IP de un servidor a su clave pública de host.
Cuando se conecta por primera vez a un servidor, SSH le pide que verifique la huella digital del host. Una vez aceptada, la clave se añade a ~/.ssh/known_hosts. Si la clave del servidor cambia alguna vez, SSH le advertirá y bloqueará la conexión.
Formato de una entrada:
[nombre_host],[IP] ssh-ed25519 AAAAC3Nza...
4. Mejores Prácticas para la Seguridad de SSH
- Utilice una Frase de Contraseña: Proteja siempre su clave privada con una frase de contraseña sólida. Incluso si le roban la clave, no servirá de nada sin la frase de contraseña.
- Desactive la Autenticación por Contraseña: Una vez que tenga funcionando las claves SSH, desactive los inicios de sesión por contraseña en
/etc/ssh/sshd_configestableciendoPasswordAuthentication no. - Rote las Claves Regularmente: Al igual que las contraseñas, las claves SSH deben cambiarse periódicamente, especialmente cuando los empleados dejan la empresa.
- Utilice el Agente SSH: Use
ssh-agentpara almacenar sus claves descifradas en la memoria, de modo que no tenga que escribir su frase de contraseña para cada conexión. - Implemente un Servidor de Salto (Bastion Host): En lugar de exponer todos sus servidores a la Internet pública, utilice un único punto de entrada reforzado.
5. Resumen
Al dominar los generadores de claves SSH y comprender los formatos authorized_keys y known_hosts, puede reducir significativamente el riesgo de acceso no autorizado a su infraestructura. Pasar de las contraseñas a la autenticación basada en claves es el paso más importante para asegurar cualquier entorno basado en Linux.