Cómo generar y asegurar claves SSH para acceso remoto
Secure Shell (SSH) es el protocolo estándar para conectar de forma segura a servidores y sistemas remotos. Aunque la autenticación por contraseña es común, usar pares de claves SSH ofrece un método de autenticación significativamente más fuerte, conveniente y resistente. Esta guía completa te ayudará a generar pares de claves SSH robustos, asegurarlos con frases de contraseña (passphrases) y utilizar ssh-agent para un acceso remoto fluido y seguro.
Comprender la gestión de claves es crucial para mantener la seguridad de tu infraestructura. Al reemplazar contraseñas vulnerables con claves criptográficas, mitigas los riesgos asociados con ataques de fuerza bruta y relleno de credenciales, estableciendo una base sólida de conectividad remota segura.
Entendiendo los pares de claves SSH
Un par de claves SSH consta de dos componentes distintos:
- La clave privada: Esta clave nunca debe compartirse. Permanece segura en tu máquina local y se utiliza para probar tu identidad al servidor remoto.
- La clave pública: Esta clave se comparte libremente y se sube al archivo
~/.ssh/authorized_keysen el/los servidor(es) remoto(s) al que deseas acceder. El servidor usa esta clave para verificar la firma generada por tu clave privada.
Eligiendo el algoritmo correcto
Al generar claves, es esencial seleccionar un algoritmo criptográfico moderno y fuerte. RSA todavía se usa ampliamente, pero Ed25519 a menudo se recomienda por su velocidad y sólidas garantías de seguridad.
Paso 1: Generación del par de claves SSH
La utilidad ssh-keygen es la herramienta estándar para crear pares de claves SSH en Linux, macOS y Windows (a través de Git Bash o WSL).
Generación de una clave Ed25519 (recomendado)
Para crear una clave Ed25519 moderna, usa el siguiente comando. Especificamos el tipo de clave (-t ed25519) y proporcionamos un comentario (-C) para ayudar a identificar el propósito o propietario de la clave:
ssh-keygen -t ed25519 -C "[email protected]_or_host_name"
Cuando se te solicite:
- Introduce el archivo donde guardar la clave: Pulsa Enter para aceptar la ubicación predeterminada (
/home/user/.ssh/id_ed25519). - Introduce la frase de contraseña (recomendado): Siempre establece una frase de contraseña fuerte. Esto encripta tu clave privada, así que incluso si alguien roba el archivo, no podrá usarlo sin la frase de contraseña.
Generación de una clave RSA (alternativa)
Si se requiere compatibilidad con sistemas muy antiguos, puedes generar una clave RSA, asegurándote de especificar una longitud de clave suficiente (al menos 4096 bits):
ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"
Archivos de salida de la clave
Después de la generación, se crean dos archivos en tu directorio ~/.ssh/ (asumiendo los valores predeterminados):
id_ed25519(oid_rsa): Tu clave privadaid_ed25519.pub(oid_rsa.pub): Tu clave pública
Mejor práctica de seguridad: Nunca compartas el archivo sin la extensión
.pub. Establece permisos restrictivos en tu clave privada (chmod 600 ~/.ssh/id_ed25519).
Paso 2: Copiar la clave pública al servidor
El servidor remoto debe tener tu clave pública en su archivo ~/.ssh/authorized_keys para conceder el acceso.
Usando ssh-copy-id (el método más fácil)
La utilidad ssh-copy-id automatiza el proceso, manejando la creación de directorios y la configuración de permisos en el servidor remoto. Deberás autenticarte con una contraseña por última vez para esta configuración inicial.
ssh-copy-id user@remote_host_ip
Si tiene éxito, el comando te informará que las claves se han añadido. Ahora puedes intentar iniciar sesión.
Copia manual (si ssh-copy-id no está disponible)
Si no puedes usar ssh-copy-id, puedes añadir manualmente el contenido de la clave pública. Primero, muestra la clave pública:
cat ~/.ssh/id_ed25519.pub
Luego, inicia sesión en el servidor remoto usando tu contraseña y añade la salida al archivo authorized_keys:
# En el servidor remoto
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# Reemplaza <PASTE_YOUR_PUBLIC_KEY_HERE> con el contenido real de la clave
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Paso 3: Asegurando el acceso con ssh-agent
Escribir tu frase de contraseña cada vez que te conectas a un servidor se vuelve tedioso. El ssh-agent es un programa en segundo plano que almacena de forma segura tus claves privadas descifradas en la memoria, permitiéndote usarlas sin introducir repetidamente la frase de contraseña.
Iniciando y usando ssh-agent
-
Asegúrate de que el agente esté funcionando: En la mayoría de los sistemas Linux/macOS modernos, el agente se inicia automáticamente cuando inicias sesión. Puedes verificar su estado buscando las variables de entorno:
bash echo $SSH_AUTH_SOCK -
Añade tu clave al agente: Usa el comando
ssh-addpara cargar tu clave privada. Se te pedirá la frase de contraseña solo una vez.```bash
ssh-add ~/.ssh/id_ed25519Introduce la frase de contraseña para /home/user/.ssh/id_ed25519: ****
Identidad añadida: /home/user/.ssh/id_ed25519 (comentario)
```
-
Verifica las claves cargadas:
bash ssh-add -l
Ahora, cuando ejecutes ssh user@remote_host_ip, la conexión se autenticará usando la clave que tiene el agente sin pedir la frase de contraseña de nuevo (hasta que termine la sesión del agente).
Notas importantes sobre ssh-agent
- Dependiente de la sesión: Las claves cargadas en el agente suelen estar disponibles solo para la sesión de terminal actual o la sesión de inicio de escritorio. Deberás volver a ejecutar
ssh-adddespués de cerrar y volver a iniciar sesión. - Vida útil de la clave: Puedes establecer una vida útil máxima para las claves mantenidas en el agente usando el indicador
-t(por ejemplo,ssh-add -t 1h ~/.ssh/id_ed25519mantiene la clave cargada durante una hora).
Seguridad avanzada: Deshabilitar la autenticación por contraseña
Una vez que hayas confirmado que la autenticación basada en claves funciona perfectamente en todos los servidores requeridos, la medida de seguridad más fuerte es deshabilitar por completo los inicios de sesión basados en contraseña. Esto previene ataques de fuerza bruta contra las contraseñas.
- Conéctate a tu servidor vía SSH usando tu clave.
-
Edita el archivo de configuración del demonio SSH, usualmente ubicado en
/etc/ssh/sshd_config:bash sudo nano /etc/ssh/sshd_config -
Encuentra y establece las siguientes directivas:
```config
Asegúrate de que esto esté configurado en yes (normalmente es el valor predeterminado)
PubkeyAuthentication yes
Deshabilita los inicios de sesión por contraseña
PasswordAuthentication no
``` -
Reinicia el servicio SSH para aplicar los cambios:
```bash
sudo systemctl restart sshd # Para sistemas basados en systemd (la mayoría de los Linux modernos)O
sudo service ssh restart # Sistemas más antiguos
```
Advertencia: Antes de deshabilitar la autenticación por contraseña, asegúrate de haber iniciado sesión con éxito al menos una vez usando tu nueva clave. Quedarse bloqueado debido a un error de configuración es un error común y recuperable, pero requiere acceso por consola o alternativo.
Resumen y próximos pasos
Generar y gestionar claves SSH es una habilidad fundamental para la administración segura de sistemas. Al seguir estos pasos (generar claves Ed25519 modernas, proteger la clave privada con una frase de contraseña fuerte, instalar de forma segura la clave pública en los servidores de destino y aprovechar ssh-agent), estableces un mecanismo de autenticación altamente seguro y eficiente.
Próximos pasos:
- Genera un par de claves único para cada sistema o servicio importante al que accedas.
- Audita regularmente el archivo
authorized_keysen servidores críticos. - Usa diferentes frases de contraseña para diferentes pares de claves si es posible, o al menos asegúrate de que sean complejos.