Guía paso a paso para asegurar la autenticación basada en claves SSH
Secure Shell (SSH) es la columna vertebral de la administración remota de sistemas, ya que permite un acceso seguro a los servidores a través de una red no segura. Aunque la autenticación basada en contraseñas es común, es inherentemente vulnerable a ataques de fuerza bruta y 'credential stuffing'. La autenticación basada en claves SSH ofrece una alternativa mucho más robusta y segura, utilizando pares de claves criptográficas para verificar la identidad sin transmitir contraseñas.
Esta guía le guiará a través de todo el proceso de configuración de la autenticación segura basada en claves SSH. Aprenderá a generar su par de claves SSH, distribuir de forma segura su clave pública a un servidor remoto y, fundamentalmente, fortalecer la configuración SSH de su servidor deshabilitando los inicios de sesión con contraseña menos seguros. Siguiendo estos pasos, mejorará significativamente la postura de seguridad de su acceso remoto, haciendo sus sistemas más resistentes a vectores de ataque comunes.
Entendiendo la Autenticación Basada en Claves SSH
La autenticación basada en claves SSH se basa en un par de claves vinculadas criptográficamente: una clave privada y una clave pública.
- Clave Privada: Esta clave debe permanecer secreta y segura en su máquina local. Es como una contraseña muy compleja que solo usted posee.
- Clave Pública: Esta clave puede compartirse libremente y se coloca en el servidor remoto al que desea acceder. El servidor la utiliza para verificar su identidad.
Cuando intenta conectarse, el servidor utiliza su clave pública para desafiar a su máquina local. Su máquina local utiliza entonces su clave privada para responder a este desafío, probando su identidad sin enviar nunca la clave privada a través de la red. Este método no solo es más seguro, sino también más conveniente, ya que elimina la necesidad de escribir una contraseña para cada conexión una vez configurado correctamente.
Paso 1: Generación de su Par de Claves SSH
La utilidad ssh-keygen se utiliza para crear nuevos pares de claves SSH. Se recomienda utilizar algoritmos modernos y fuertes como ED25519.
Elegir un Tipo y Fortaleza de Clave
Aunque las claves RSA todavía se utilizan ampliamente, ED25519 ofrece una seguridad excelente con longitudes de clave más cortas y operaciones más rápidas. Para las configuraciones nuevas, generalmente se prefiere ED25519.
Generar el Par de Claves
En su máquina local (cliente), abra su terminal y ejecute el siguiente comando:
ssh-keygen -t ed25519 -C "[email protected]"
-t ed25519: Especifica el tipo de clave como ED25519.-C "[email protected]": Añade un comentario a la clave pública, a menudo utilizado para la identificación. Reemplace con su correo electrónico real o una etiqueta descriptiva.
El comando le pedirá una ubicación para guardar la clave y una frase de contraseña opcional.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...
Establecer una Frase de Contraseña Fuerte (Muy Recomendado)
Cuando se le solicite, siempre establezca una frase de contraseña fuerte para su clave privada. Esta frase de contraseña cifra su clave privada en su máquina local, proporcionando una capa adicional de seguridad. Si su clave privada cae en manos equivocadas, será inútil sin la frase de contraseña. Puede usar ssh-agent para evitar escribir la frase de contraseña repetidamente (consulte el Paso 4).
Ubicaciones de los Archivos de Clave
Por defecto, ssh-keygen guarda su clave privada en ~/.ssh/id_ed25519 y su clave pública en ~/.ssh/id_ed25519.pub.
Permisos para su Clave Privada
Es crucial que su archivo de clave privada tenga permisos muy estrictos. Solo el propietario debe poder leerlo. ssh-keygen generalmente lo configura correctamente, pero es bueno verificarlo:
chmod 600 ~/.ssh/id_ed25519
Paso 2: Distribución de su Clave Pública al Servidor
Una vez que haya generado su par de claves, su clave pública debe copiarse al servidor remoto al que desea acceder. Debe colocarse en un archivo llamado authorized_keys dentro del directorio ~/.ssh/ de su usuario en el servidor remoto.
Método 1: Usando ssh-copy-id (Recomendado)
ssh-copy-id es el método más sencillo y seguro. Inicia sesión en el servidor remoto (usando su contraseña), crea el directorio ~/.ssh si no existe, establece los permisos correctos y añade su clave pública a ~/.ssh/authorized_keys.
ssh-copy-id user@your_server_ip
Reemplace user con su nombre de usuario en el servidor remoto y your_server_ip con la dirección IP o el nombre de host del servidor. Se le pedirá su contraseña en el servidor remoto.
Método 2: Copia Manual
Si ssh-copy-id no está disponible, puede copiar la clave pública manualmente.
-
Copie el contenido de la clave pública desde su máquina local:
bash cat ~/.ssh/id_ed25519.pub
Copie toda la salida a su portapapeles (comienza conssh-ed25519 ...). -
Inicie sesión en el servidor remoto usando su contraseña:
bash ssh user@your_server_ip -
Cree el directorio
~/.sshsi no existe y establezca los permisos:
bash mkdir -p ~/.ssh chmod 700 ~/.ssh -
Añada su clave pública a
authorized_keys:
bash echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
Asegúrese de reemplazarPASTE_YOUR_PUBLIC_KEY_HEREcon el contenido real que copió. Usar>>(añadir) es importante para evitar sobrescribir claves existentes si las hay. -
Establezca los permisos correctos para
authorized_keys:
bash chmod 600 ~/.ssh/authorized_keys- Advertencia: Los permisos incorrectos en
~/.ssho~/.ssh/authorized_keysimpedirán que funcione la autenticación basada en claves.
- Advertencia: Los permisos incorrectos en
Paso 3: Pruebe su Autenticación Basada en Claves SSH
Antes de proceder a deshabilitar la autenticación por contraseña, es absolutamente crítico verificar que la autenticación basada en claves funcione correctamente. Cierre la sesión del servidor remoto si todavía está conectado desde los pasos de copia manual.
Desde su máquina local, intente conectarse al servidor sin especificar una contraseña:
ssh user@your_server_ip
- Si estableció una frase de contraseña para su clave privada, se le pedirá que la introduzca.
- Si la conexión es exitosa sin solicitar una contraseña (después de la frase de contraseña, si corresponde), su autenticación basada en claves está funcionando. Debería ver el indicador del servidor remoto.
NO proceda al Paso 4 si no puede iniciar sesión usando su clave SSH. Solucione cualquier problema antes de deshabilitar la autenticación por contraseña, o corre el riesgo de quedarse bloqueado fuera del servidor.
Paso 4: Mejora de la Seguridad - Deshabilitar la Autenticación por Contraseña
Una vez que haya confirmado que la autenticación basada en claves SSH funciona, puede deshabilitar los inicios de sesión basados en contraseñas en su servidor para mejorar significativamente la seguridad. Esto evita ataques de fuerza bruta contra su contraseña y asegura que solo aquellos con claves SSH válidas puedan acceder al servidor.
-
Inicie sesión en su servidor remoto usando su clave SSH.
bash ssh user@your_server_ip -
Edite el archivo de configuración del demonio SSH. Este archivo se encuentra normalmente en
/etc/ssh/sshd_config.
bash sudo nano /etc/ssh/sshd_config
(Puede usarvio su editor de texto preferido en lugar denano.) -
Localice y modifique las siguientes directivas:
-
Busque
PasswordAuthenticationy cambie su valor ano.
#PasswordAuthentication yes PasswordAuthentication no
(Descomente la línea si está comentada con#) -
Busque
ChallengeResponseAuthenticationy cambie su valor ano.
#ChallengeResponseAuthentication yes ChallengeResponseAuthentication no -
(Opcional pero recomendado) Considere deshabilitar el inicio de sesión de root directamente a través de SSH si planea usar
sudodespués de iniciar sesión como usuario regular.
PermitRootLogin no -
(Opcional) Considere cambiar el puerto SSH predeterminado de
22a un puerto alto no estándar (por ejemplo,2222). Esto no añade seguridad contra ataques dirigidos, pero puede reducir el ruido de los escáneres de puertos automatizados.
#Port 22 Port 2222
Si cambia el puerto, recuerde especificarlo con la bandera-pal conectarse (por ejemplo,ssh -p 2222 user@your_server_ip).
-
-
Guarde los cambios y salga del editor de texto.
-
Reinicie el servicio SSH para aplicar la nueva configuración. El comando varía ligeramente dependiendo de su sistema operativo (por ejemplo, Ubuntu/Debian frente a CentOS/RHEL).
-
Sistemas basados en Systemd (la mayoría de las distribuciones Linux modernas):
bash sudo systemctl restart sshd -
Sistemas más antiguos basados en SysVinit:
bash sudo service ssh restart
-
-
Crucialmente, abra una nueva ventana de terminal (¡no cierre su sesión SSH activa actual!) e intente iniciar sesión usando su clave. Esto prueba la nueva configuración sin bloquearse si algo salió mal.
bash ssh user@your_server_ip
Si cambió el puerto:
bash ssh -p 2222 user@your_server_ipSi la conexión es exitosa, ahora puede cerrar de forma segura su sesión SSH original.
Si el nuevo inicio de sesión falla, revierta inmediatamente los cambios en
sshd_configen su sesión SSH activa y original y reinicie el servicio SSH de nuevo, luego reevalúe.
Mejores Prácticas y Consejos
- Utilice siempre una frase de contraseña fuerte para su clave privada. Esta es su última línea de defensa si su clave privada se ve comprometida.
- Proteja su clave privada. Nunca la comparta y asegúrese de que esté almacenada de forma segura con permisos de archivo estrictos (
chmod 600 ~/.ssh/id_ed25519). Considere módulos de seguridad de hardware (HSM) o YubiKeys para la máxima protección. - Utilice
ssh-agentpara mayor comodidad.ssh-agentle permite cargar sus claves privadas en la memoria y escribir su frase de contraseña solo una vez por sesión, incluso a través de múltiples conexiones SSH. Agregue su clave al agente conssh-add ~/.ssh/id_ed25519. - Rote sus claves SSH regularmente. Genere periódicamente nuevos pares de claves y elimine las claves públicas antiguas de sus servidores, especialmente si un miembro del equipo se va o se sospecha que la seguridad de una clave ha sido comprometida.
- Limite
PermitRootLoginanooprohibit-password. Generalmente es mejor iniciar sesión como usuario regular y usarsudopara tareas administrativas. - Configure un cortafuegos. Asegúrese de que solo los puertos necesarios (como su puerto SSH) estén abiertos a Internet. Herramientas como
ufwofirewalldpueden ayudar.
Conclusión
Siguiendo esta guía paso a paso, ha configurado y asegurado con éxito la autenticación basada en claves SSH para su servidor remoto. Ha generado un par de claves criptográficas robustas, distribuido su clave pública y, lo que es más importante, ha deshabilitado los inicios de sesión basados en contraseñas menos seguros. Esto mejora significativamente la seguridad de su servidor, haciéndolo más resistente a los intentos de piratería comunes.
Recuerde siempre proteger diligentemente su clave privada y su frase de contraseña, ya que ahora es la credencial principal para acceder a su servidor. Adopte estas mejores prácticas para mantener una postura de seguridad sólida para todas sus necesidades de acceso remoto.