Entendiendo la Autenticación por Clave SSH: Claves Pública vs. Privada Explicadas
SSH (Secure Shell) es la columna vertebral del acceso remoto seguro a servidores, permitiendo a administradores y desarrolladores gestionar sistemas desde cualquier lugar. Si bien la autenticación basada en contraseñas es un método común, a menudo presenta vulnerabilidades de seguridad. La alternativa preferida por la industria y significativamente más segura es la autenticación por clave SSH.
Este artículo tiene como objetivo desmitificar la autenticación por clave SSH explicando claramente los roles fundamentales de las claves pública y privada. Profundizaremos en cómo estos homólogos criptográficos trabajan juntos para asegurar sus conexiones remotas, proporcionando una defensa robusta contra el acceso no autorizado. Al final, comprenderá por qué este método no solo es más seguro que los inicios de sesión tradicionales basados en contraseñas, sino también más conveniente para el uso diario.
El Problema con las Contraseñas
La autenticación tradicional basada en contraseñas se basa en un secreto compartido: la contraseña. Si bien las contraseñas seguras pueden proporcionar un nivel decente de seguridad, son susceptibles a varias debilidades:
- Ataques de fuerza bruta: Los atacantes pueden probar innumerables combinaciones de contraseñas hasta que aciertan.
- Ataques de diccionario: Utilizando palabras o frases comunes, los atacantes pueden comprometer cuentas rápidamente.
- Keyloggers: El software malicioso puede capturar las pulsaciones del teclado, revelando contraseñas.
- Phishing: Las tácticas de ingeniería social pueden engañar a los usuarios para que divulguen sus credenciales.
- Error humano: Los usuarios a menudo eligen contraseñas débiles, fáciles de adivinar o reutilizadas, y pueden exponerlas accidentalmente.
La autenticación por clave SSH mitiga estos riesgos al eliminar la necesidad de transmitir un secreto a través de la red, lo que la convierte en una opción superior para asegurar su infraestructura remota.
Autenticación por Clave SSH: Una Visión General
La autenticación por clave SSH aprovecha la criptografía asimétrica, un sistema que utiliza un par de claves matemáticamente enlazadas: una clave pública y una clave privada. A diferencia de la criptografía simétrica, donde se utiliza la misma clave tanto para cifrar como para descifrar, la criptografía asimétrica utiliza una clave para cifrar y una clave diferente, pero relacionada, para descifrar.
Cuando intenta conectarse a un servidor SSH utilizando claves, el servidor desafía a su cliente, y su cliente demuestra su identidad utilizando su clave privada sin enviar nunca la clave privada en sí misma a través de la red. Este proceso garantiza que solo los clientes que poseen la clave privada correcta puedan establecer una conexión con los servidores configurados para confiar en la clave pública correspondiente.
El Dúo Criptográfico: Claves Pública y Privada
En el corazón de la autenticación por clave SSH se encuentran estos dos componentes distintos, pero interconectados.
La Clave Privada
La clave privada es su identidad secreta. Es una cadena de caracteres larga y compleja que debe mantenerse absolutamente confidencial y nunca compartirse con nadie. Piénselo como la llave única de su caja fuerte digital.
- Crítico para la seguridad: Si su clave privada se ve comprometida, un atacante podría hacerse pasar por usted y obtener acceso no autorizado a cualquier servidor donde se haya implementado la clave pública correspondiente.
- Ubicación: Típicamente almacenada en su máquina local (por ejemplo,
~/.ssh/id_rsa,~/.ssh/id_ed25519). - Protección: A menudo está protegida por una frase de contraseña, lo que añade una capa adicional de seguridad. Incluso si un atacante accede a su archivo de clave privada, no podrá utilizarlo sin la frase de contraseña.
La Clave Pública
La clave pública es la contraparte de su clave privada. Se deriva de su clave privada, pero no puede usarse para recrear la clave privada. Como su nombre indica, la clave pública está destinada a ser compartida y colocada en cualquier servidor al que desee acceder.
- Compartible: Puede distribuir de forma segura su clave pública a cualquier persona o servidor sin comprometer su seguridad.
- Ubicación: En el servidor, las claves públicas se almacenan típicamente en el archivo
~/.ssh/authorized_keyspara cada cuenta de usuario. Cada línea de este archivo representa una clave pública de confianza. - Rol: La clave pública actúa como una huella digital. Cuando intenta conectarse, el servidor utiliza su clave pública para verificar que posee la clave privada correspondiente sin ver nunca la clave privada en sí misma.
Cómo Funciona la Autenticación por Clave SSH: El Saludo
Analicemos el proceso paso a paso de cómo la autenticación por clave SSH establece una conexión segura:
- Generación de Pares de Claves: Primero, genera un par de claves pública y privada en su máquina local. La clave privada permanece secreta y la clave pública es la que distribuirá.
- Despliegue de la Clave Pública: Copia su clave pública al servidor remoto al que desea acceder. Esta clave se suele añadir al archivo
~/.ssh/authorized_keysen el directorio principal de su usuario en el servidor. - Intento de Conexión: Cuando inicia una conexión SSH desde su máquina local al servidor remoto, su cliente SSH indica que desea autenticarse utilizando una clave.
- Desafío del Servidor: El servidor, al tener su clave pública, genera una cadena aleatoria de datos (un "desafío") y la cifra utilizando su clave pública.
- Respuesta del Cliente: El servidor envía este desafío cifrado a su cliente SSH. Luego, su cliente utiliza su clave privada para descifrar el desafío.
- Verificación: Su cliente cifra la cadena aleatoria original (o una derivada de ella, junto con datos de sesión) utilizando su clave privada y la envía de vuelta al servidor. El servidor utiliza su clave pública para descifrar esta respuesta. Si el valor descifrado coincide con el desafío original, el servidor confía en que usted posee la clave privada correcta.
- Autenticación Concedida: Si la verificación es exitosa, el servidor le concede acceso y se establece una sesión SSH segura.
Crucialmente, su clave privada nunca sale de su máquina local durante todo este proceso. Solo se intercambian pruebas criptográficas derivadas de ella.
Generación de un Par de Claves SSH
Generar un par de claves SSH es un proceso sencillo utilizando el comando ssh-keygen en su máquina local (Linux, macOS o WSL/Git Bash en Windows).
ssh-keygen -t ed25519 -C "[email protected]"
-t ed25519: Especifica el tipo de clave a crear.ed25519es un algoritmo moderno, altamente seguro y eficiente.rsatambién es común, peroed25519es generalmente preferido ahora.-C "[email protected]": Añade un comentario a la clave pública, lo que le ayuda a identificar su propósito o propietario.
Se le pedirá un archivo donde guardar la clave (el valor predeterminado es ~/.ssh/id_ed25519) y una frase de contraseña. Utilice siempre una frase de contraseña segura para proteger su clave privada.
Generando par de claves ed25519 pública/privada.
Introduzca el archivo en el que desea guardar la clave (~/.ssh/id_ed25519):
Directorio '/home/tu_usuario/.ssh' creado.
Introduzca la frase de contraseña (dejar en blanco para no usar frase de contraseña):
Introduzca la misma frase de contraseña de nuevo:
Su identificación se ha guardado en /home/tu_usuario/.ssh/id_ed25519.
Su clave pública se ha guardado en /home/tu_usuario/.ssh/id_ed25519.pub.
La huella digital de la clave es: SHA256:...
La imagen randomart de la clave es:
+--[ED25519 256]----+
| .=+ |
| . o. . |
| . + o. |
| o = B o. |
| . S @ + + |
| = + B . |
| o * * E |
| . o o |
| . . |
+----[SHA256]-------+
Después de la generación, tendrá dos archivos en su directorio ~/.ssh:
id_ed25519(su clave privada)id_ed25519.pub(su clave pública)
Advertencia: Asegúrese de que su archivo de clave privada (id_ed25519) tenga permisos estrictos (por ejemplo, chmod 600 ~/.ssh/id_ed25519) para que solo usted pueda leerlo/escribirlo.
Despliegue de su Clave Pública
Para utilizar la autenticación por clave, su clave pública debe colocarse en el servidor remoto al que desea acceder.
Uso de ssh-copy-id (Recomendado)
La utilidad ssh-copy-id es la forma más sencilla y segura de desplegar su clave pública. Se encarga de crear el directorio ~/.ssh y el archivo authorized_keys con los permisos correctos si no existen.
ssh-copy-id -i ~/.ssh/id_ed25519.pub 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á su contraseña para usuario@servidor_remoto por última vez para subir la clave.
Despliegue Manual
Si ssh-copy-id no está disponible, puede copiar la clave pública manualmente:
-
Copiar el contenido de la clave pública: Muestre su clave pública usando
cat.
bash cat ~/.ssh/id_ed25519.pub
Copie toda la salida, que comienza conssh-ed25519 ...y termina con su comentario. -
Inicie sesión en el servidor remoto usando autenticación por contraseña:
bash ssh usuario@servidor_remoto
Introduzca su contraseña cuando se le solicite. -
Cree el directorio
~/.sshy el archivoauthorized_keyssi no existen:
bash mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys -
Añada su clave pública al archivo
authorized_keys: Pegue el contenido de la clave pública que copió anteriormente en el archivoauthorized_keys.
bash echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys
(Reemplacessh-ed25519 AAAA...con el contenido real de su clave pública)
Conexión con Claves SSH
Una vez que su clave pública esté en el servidor, puede conectarse simplemente especificando el usuario y el host:
ssh usuario@servidor_remoto
Si tiene varios pares de claves o su clave privada no se encuentra en la ubicación predeterminada (~/.ssh/id_rsa o ~/.ssh/id_ed25519), es posible que necesite especificarla usando la opción -i:
ssh -i ~/.ssh/mi_clave_personalizada usuario@servidor_remoto
Si su clave privada está protegida por una frase de contraseña, se le pedirá que la introduzca. Para evitar introducir la frase de contraseña repetidamente durante una sesión, puede usar ssh-agent.
Beneficios de Seguridad de la Autenticación por Clave SSH
- Elimina la adivinación de contraseñas: Dado que no se utilizan contraseñas para la autenticación, los ataques de fuerza bruta contra su contraseña se vuelven imposibles.
- Credenciales más fuertes: Las claves SSH son típicamente valores criptográficos de 2048 bits (RSA) o 256 bits (Ed25519), lo que las hace mucho más complejas y difíciles de descifrar que incluso las contraseñas humanas más seguras.
- Sin transmisión de secretos: Su clave privada nunca sale de su máquina local, lo que reduce significativamente el riesgo de que sea interceptada o robada durante la autenticación.
- Amigable con la automatización: Las claves permiten inicios de sesión automatizables y sin contraseña, lo cual es esencial para herramientas de automatización y pipelines de CI/CD.
- Protección por frase de contraseña: Añadir una frase de contraseña a su clave privada proporciona una capa adicional de seguridad. Incluso si su archivo de clave privada es robado, sigue siendo inútil sin la frase de contraseña.
Gestión de sus Claves SSH
ssh-agent
ssh-agent es un programa que se ejecuta en segundo plano y mantiene sus claves privadas descifradas en memoria. Cuando intenta conectarse a un servidor SSH, su cliente SSH puede consultar a ssh-agent la clave privada necesaria, eliminando la necesidad de escribir su frase de contraseña repetidamente.
Para iniciar ssh-agent y añadir su clave:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Introducirá su frase de contraseña una vez al añadir la clave al agente.
Nomenclatura y Organización de Claves
Para gestionar múltiples claves (por ejemplo, para diferentes organizaciones, proyectos o uso personal), considere usar nombres significativos:
ssh-keygen -t ed25519 -f ~/.ssh/id_proyecto_trabajo -C "clave_proyecto_trabajo"
ssh-keygen -t ed25519 -f ~/.ssh/id_github_personal -C "clave_github_personal"
A continuación, puede especificar qué clave usar con la opción -i, o configurar su archivo ~/.ssh/config para seleccionar automáticamente la clave correcta según el host.
Ejemplo de ~/.ssh/config:
Host github.com
IdentityFile ~/.ssh/id_github_personal
User git
Host servidor-trabajo
Hostname 192.168.1.100
IdentityFile ~/.ssh/id_proyecto_trabajo
User usuariodesarrollador
Mejores Prácticas y Consejos
- Nunca comparta su clave privada: Esta es la regla de oro. Su clave privada es su identidad digital.
- Use una frase de contraseña segura: Proteja su clave privada con una frase de contraseña robusta, similar a una contraseña segura. Esto hace que su clave sea inútil incluso si cae en manos equivocadas.
- Rote las claves regularmente: Genere periódicamente nuevas claves y revoque las antiguas, especialmente si sospecha que una clave podría haber sido comprometida.
- Restrinja los permisos de archivo: Asegúrese de que su archivo de clave privada tenga permisos
600(rw-------) y que su directorio~/.sshtenga700(rwx------). - Deshabilite la autenticación por contraseña en los servidores: Una vez que haya configurado la autenticación por clave, considere deshabilitar la autenticación por contraseña para SSH en sus servidores para mejorar drásticamente la seguridad. Esto a menudo se hace estableciendo
PasswordAuthentication noen/etc/ssh/sshd_config. - Use
ssh-agent: Para mayor comodidad y seguridad, usessh-agentpara gestionar sus claves, especialmente aquellas con frases de contraseña.
Conclusión
La autenticación por clave SSH proporciona un método robusto, seguro y conveniente para acceder a servidores remotos. Al comprender los roles distintos de las claves pública y privada y cómo interactúan en el saludo criptográfico, puede mejorar significativamente su seguridad operativa. Pasar de inicios de sesión basados en contraseñas a claves SSH es un paso fundamental hacia una mejor gestión de servidores y protección contra vectores de ataque comunes. Adopte este poderoso mecanismo de seguridad para salvaguardar su infraestructura digital.