Guía para principiantes sobre claves SSH: Generar, usar y gestionar de forma segura
Secure Shell (SSH) es el estándar de facto para el acceso remoto seguro a servidores y otros dispositivos de red. Si bien la autenticación basada en contraseñas es común, puede ser vulnerable a ataques de fuerza bruta y requiere memorizar contraseñas complejas. Las claves SSH ofrecen una alternativa más robusta y cómoda, lo que permite la autenticación sin contraseña y mejora su postura de seguridad general.
Esta guía le guiará a través de los pasos esenciales para generar, implementar y gestionar pares de claves SSH. Al comprender e implementar estas prácticas, puede mejorar significativamente la seguridad de su acceso remoto y optimizar su flujo de trabajo. Cubriremos los conceptos centrales, los comandos prácticos y las mejores prácticas para comenzar con la autenticación mediante claves SSH.
Comprensión de los pares de claves SSH
La autenticación mediante claves SSH se basa en un par de claves criptográficas: una clave privada y una clave pública. Estas claves están matemáticamente vinculadas, pero es computacionalmente inviable derivar la clave privada a partir de la clave pública.
- Clave Privada: Esta clave debe mantenerse en secreto y nunca debe compartirse. Reside en su máquina local y actúa como su identidad. Cuando inicia una conexión SSH, su cliente utiliza su clave privada para probar su identidad.
- Clave Pública: Esta clave se puede compartir libremente. Colocará su clave pública en los servidores remotos a los que desea acceder. Cuando intenta conectarse, el servidor utiliza su clave pública para verificar que usted posee la clave privada correspondiente.
Cuando intenta conectarse a un servidor, ocurre el siguiente proceso:
- Su cliente SSH presenta su clave pública al servidor.
- El servidor comprueba si esta clave pública está autorizada (es decir, presente en su archivo
authorized_keys). - Si está autorizado, el servidor envía un desafío a su cliente.
- Su cliente utiliza su clave privada para cifrar el desafío y envía la respuesta cifrada de vuelta al servidor.
- El servidor descifra la respuesta utilizando su clave pública. Si el descifrado es exitoso y coincide con el desafío original, se concede la autenticación sin necesidad de una contraseña.
Generación de pares de claves SSH
La herramienta más común para generar pares de claves SSH es ssh-keygen. Este comando está disponible en la mayoría de los sistemas Linux, macOS y Windows (a través de WSL o Git Bash).
Uso de ssh-keygen
Para generar un nuevo par de claves SSH, abra su terminal o símbolo del sistema y ejecute el siguiente comando:
ssh-keygen -t ed25519
Analicemos este comando:
ssh-keygen: El comando para generar claves SSH.-t ed25519: Especifica el tipo de clave a crear.ed25519es un algoritmo de criptografía de curva elíptica moderno, altamente seguro y rápido. Otras opciones comunes incluyenrsa(por ejemplo,ssh-keygen -t rsa -b 4096para una clave RSA de 4096 bits).
Al ejecutar el comando, se le harán algunas preguntas:
- Introduzca el archivo donde guardar la clave (ej.
/home/su_usuario/.ssh/id_ed25519): Presione Enter para aceptar la ubicación predeterminada. Esto creará dos archivos en su directorio.ssh:id_ed25519(su clave privada) yid_ed25519.pub(su clave pública). - Introduzca la frase de contraseña (dejar en blanco para no usar frase de contraseña): Este es un paso de seguridad crucial. Introducir una frase de contraseña cifra su clave privada en el disco. Si su archivo de clave privada se ve comprometido alguna vez, el atacante aún necesitaría la frase de contraseña para usarla. Es muy recomendable utilizar una frase de contraseña segura.
- Vuelva a introducir la frase de contraseña: Confirme su frase de contraseña.
Comprensión de los archivos de salida
Después de la generación, se crearán dos archivos en su directorio ~/.ssh/ (o la ruta que especificó):
id_ed25519(oid_rsa): Su clave privada. NUNCA COMPARTA ESTE ARCHIVO. Restrinja sus permisos a solo lectura para su usuario.id_ed25519.pub(oid_rsa.pub): Su clave pública. Esta es la clave que distribuirá a los servidores.
Asegurar su clave privada
Es fundamental asegurarse de que su clave privada tenga los permisos de archivo correctos. En Linux/macOS, ejecute:
chmod 600 ~/.ssh/id_ed25519
Este comando restringe los permisos de lectura y escritura solo al propietario del archivo, evitando que otros usuarios del sistema accedan a su clave privada.
Implementación de su clave pública en un servidor
Una vez que haya generado su par de claves SSH, debe colocar su clave pública en el(los) servidor(es) remoto(s) al que desea acceder.
Uso de ssh-copy-id (Recomendado)
ssh-copy-id es un script de utilidad que simplifica el proceso de copiar su clave pública a un servidor remoto. Añade automáticamente su clave pública al archivo ~/.ssh/authorized_keys en el servidor y establece los permisos correctos.
Para usar ssh-copy-id, ejecute el siguiente comando desde su máquina local:
ssh-copy-id usuario@servidor_remoto
Reemplace usuario con su nombre de usuario en el servidor remoto y servidor_remoto con la dirección IP o el nombre de host del servidor. Se le pedirá la contraseña del usuario en el servidor_remoto por última vez para autorizar la transferencia de la clave.
Si está utilizando un puerto SSH no estándar (por ejemplo, 2222), puede especificarlo con la opción -p:
ssh-copy-id -p 2222 usuario@servidor_remoto
Implementación manual (si ssh-copy-id no está disponible)
Si ssh-copy-id no está disponible, puede copiar manualmente su clave pública. Primero, muestre el contenido de su clave pública en su máquina local:
cat ~/.ssh/id_ed25519.pub
Copie toda la salida. Luego, conéctese por SSH a su servidor remoto usando su contraseña:
ssh usuario@servidor_remoto
Una vez conectado, cree el directorio .ssh si no existe y luego cree o añada al archivo authorized_keys:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Ahora, pegue el contenido de su clave pública en el archivo authorized_keys. Puede hacerlo usando un editor de texto como nano o vim:
nano ~/.ssh/authorized_keys
Pegue el contenido de la clave pública copiada en una nueva línea. Guarde y salga del editor.
Finalmente, asegúrese de que el archivo authorized_keys tenga los permisos correctos:
chmod 600 ~/.ssh/authorized_keys
Después de completar estos pasos, debería poder conectarse por SSH al servidor sin contraseña.
Conexión con claves SSH
Una vez que su clave pública está en el servidor, puede conectarse usando su clave privada. El cliente SSH intentará automáticamente usar las claves encontradas en ~/.ssh/.
ssh usuario@servidor_remoto
Si utilizó una frase de contraseña durante la generación de la clave, se le pedirá que la introduzca ahora. Si no utilizó una frase de contraseña, se le iniciará sesión directamente.
Especificar una clave diferente
Si tiene varios pares de claves SSH o su clave no se encuentra en la ubicación predeterminada, puede especificar qué clave privada usar con la opción -i:
ssh -i /ruta/a/su/clave_privada usuario@servidor_remoto
Gestión de claves SSH
A medida que accede a más servidores, acumulará más claves SSH. Una gestión eficaz es clave para mantener la seguridad y la comodidad.
Agente SSH (SSH Agent)
El agente SSH es un programa en segundo plano que mantiene sus claves privadas en memoria, descifradas con su frase de contraseña. Esto le permite utilizar sus claves para múltiples conexiones SSH sin tener que volver a introducir su frase de contraseña cada vez.
- Iniciar el Agente SSH: El agente a menudo se inicia automáticamente cuando inicia sesión en su entorno de escritorio. Si no es así, puede iniciarlo manualmente:
bash eval "$(ssh-agent -s)" - Añadir claves al agente: Una vez que el agente se está ejecutando, añada su(s) clave(s) privada(s):
bash ssh-add ~/.ssh/id_ed25519
Se le pedirá su frase de contraseña. Después de esto, el agente gestionará la clave y las conexiones SSH posteriores la utilizarán automáticamente.
Archivo de configuración SSH (~/.ssh/config)
El archivo de configuración del cliente SSH (~/.ssh/config) le permite definir alias para los hosts y especificar parámetros de conexión, incluida la clave que se utilizará para un host específico. Esto es increíblemente útil para gestionar múltiples servidores.
Cree o edite el archivo ~/.ssh/config en su máquina local y añada entradas como esta:
# Configuraciones predeterminadas
Host *
ForwardAgent yes
ServerAliveInterval 60
# Servidor 1: Servidor Web
Host servidor_web
HostName 192.168.1.100
User administrador_web
Port 2222
IdentityFile ~/.ssh/clave_servidor_web
# Servidor 2: Servidor de Base de Datos
Host servidor_db
HostName db.example.com
User usuario_db
IdentityFile ~/.ssh/clave_db
Con esta configuración, puede conectarse al servidor web usando:
ssh servidor_web
Y al servidor de base de datos usando:
ssh servidor_db
El cliente SSH utilizará automáticamente el nombre de usuario, el puerto y el archivo de clave privada correctos definidos en el archivo ~/.ssh/config.
Rotación y revocación de claves
- Rotación: Considere rotar regularmente sus claves SSH, especialmente para sistemas altamente sensibles. Esto implica generar nuevas claves y reemplazar las claves públicas antiguas en los servidores.
- Revocación: Si se ve comprometida una clave privada o ya no necesita acceso, debe eliminar la clave pública correspondiente de todos los archivos
authorized_keysen los servidores donde fue implementada. Esto es fundamental para mantener la seguridad.
Mejores prácticas y consejos de seguridad
- Use frases de contraseña: Proteja siempre sus claves privadas con frases de contraseña seguras. Esta es su principal defensa contra el uso no autorizado si se roba el archivo de clave privada.
- Asegure los permisos de la clave privada: Asegúrese de que su archivo de clave privada tenga permisos
600(-rw-------). - Use
ssh-agent: Aproveche el agente SSH para evitar escribir repetidamente su frase de contraseña. - Deshabilite la autenticación por contraseña: Una vez que funcione la autenticación mediante claves SSH, considere deshabilitar la autenticación basada en contraseñas en sus servidores para una capa adicional de seguridad.
- Mantenga las claves actualizadas: Utilice algoritmos modernos y fuertes como Ed25519. Evite claves RSA antiguas sin una longitud de bits suficiente (al menos 4096).
- Tenga cuidado con
authorized_keys: Solo añada claves públicas de fuentes de confianza a su archivoauthorized_keys. - Auditorías periódicas: Revise periódicamente los archivos
authorized_keysen sus servidores para asegurarse de que solo estén presentes las claves autorizadas.
Conclusión
Las claves SSH son una herramienta poderosa para mejorar la seguridad y la comodidad de la administración de servidores remotos. Al dominar la generación, implementación y gestión de pares de claves SSH utilizando herramientas como ssh-keygen y ssh-copy-id, puede dejar atrás la autenticación basada en contraseñas y establecer un flujo de trabajo de acceso remoto más seguro y eficiente. Recuerde priorizar la seguridad utilizando frases de contraseña seguras y protegiendo sus claves privadas.