¿Has creado un nuevo servidor en Linode, Digital Ocean o Hetzner? Vale, seguro que ya has deshabilitado el acceso a root y has creado un usuario con permisos sudo para gestionar con seguridad tu servidor VPS… pero, ¿has habilitado el uso de claves de autenticación SSH Key en tu Linux (SSH Public Key Authentication)?
Es otra de las opciones que vana mejora mucho la seguridad de tu servidor, y no es tan complicado de implementar. Una de las mejores guías que he encontrado online es la de Linode: Use SSH Public Key Authentication on Linux, macOS, and Windows, que me ha servido de referencia para activar mi SSH Key en mi servidor, pero te voy a contar en detalle cómo las gestiono yo con 1Password, una opción muy interesante que aumenta un poco tu seguridad online y facilita la gestión de tus claves públicas y privadas.
¿Cuál es la ventaja de usar una clave SSH para conectarte a tu servidor VPS? Pues la principal es que evitas ataques de fuerza bruta para entrar en tu servidor mediante SSH. Con este método, vas a generar y almacenar en tu ordenador un par de claves criptográficas y luego configuraras su servidor para que reconozca y acepte esas claves. Es muy sencillo. En menos de 5 minutos lo tienes listo.
¡Dato! Lo primero que tienes que tener claro, es que vas a tener una clave pública que puedes compartir con todo el mundo. No hay problema. Que vas a tener una clave privada… ¡Que es solo para ti y no se comparte con nadie! Esa clave privada va a ser la tu llave personal para desencriptar la clave pública. Te recomiendo realizar el cifrado con Ed25519 (soportado por OpenSSH v6.5+): proporciona la mejor seguridad en este momento y también la mejor velocidad.
Si quieres saber cómo generar esas claves con ssh-keygen, hay ciento de guías de online. Yo te lo cuento de otra manera. Vas a tener que usar el gestor de contraseñas 1Password, la opción que llevo utilizando desde hace muchos años.
Creamos y gestionamos las claves SSH con 1Password
Lo primero que tenemos que hacer es abrir nuestra app de 1Password. En mi caso lo he hecho en un MacBook Pro con macOS Sonoma. Nos vamos a Ajustes del programa y luego al menú de Desarrollador. Allí, activamos el agente SSH:
Este agente SSH se va a conectar con nuestra Terminal de SSH y va a permitir que 1Password envíe los datos a esa terminal, entre ellos nuestra clave Privada SSH Key.
- De forma predeterminada, el agente SSH de 1Password hará que todas las claves elegibles en la bóveda personal o privada estén disponibles para los servidores SSH. Esta configuración se configura automáticamente cuando activas el agente SSH.
Si tienes activo el Touch ID de Apple, solamente tendrás que poner tu huella en el Mac y automáticamente inicias sesión en tu servidor. Puedes dejar Recordar la aprobación de clave hasta que 1Password se bloquee para aumentar la seguridad y que te lo pida siempre.
Vale. Una vez hecho esto, ya podemos generar nuestra nueva clave SSH Key. Le damos a Nuevo Elemento > Clave SSH:
Ahora damos en Añadir Clave Privada > Generar una nueva clave. Como puedes ver, también puede importar tus claves SSH que ya hayas generado anteriormente.
Generamos la clave con Ed25519, por lo que te he comentado antes:
Ahora que ya se ha generado. Solo hay que dar a Guardar. Acuérdate de dejar la clave en tu bóveda privada o Personal para que todo funcione bien. Si te vas a Claves SSH en el menú, verás la clave reciéntalos creada:
- Clave pública: lo que puedes compartir
- Huella dactilar: representación abreviada y única de una clave pública SSH.
- Clave privada: lo que guardas como un tesoro en 1Password.
- Tipo de Clave: Ed25519
Ya tienes tu clave privada, y si quieres, la puedes exportar. Solo tienes que apretar en Exportar al pasar el ratón por la clave privada. Eliges OpenSSH e introduces una clave de acceso para encriptar. Esto es importante, ya que fuera de 1Password hay que proteger nuestra clave Privada SSH. No la copies sin cifrar.
Vale, ya está todo listo. Ahora solo nos queda subir la clave pública SSH a nuestro servidor. Vamos a hacerlo. Yo lo he hecho en un servidor de Linode con Rocky Linux 9 instalado.
Subimos clave pública SSH a nuestro servidor
Lo primero que hay que hacer es conectarnos mediante SSH a nuestro servidor con la Terminal de macOS con un comando como este: ssh usuario@direccionIP.
En la carpeta de nuestro usuario principal (NO en root), tenemos que hacer lo siguiente:
#Creamos directorio y archivo
mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys
#damos permisos adecuados
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
#Editamos el archivo
vi ~/.ssh/authorized_keys
Y ahora que estamos editando el archivo authorized_keys, allí copiamos la clave pública de nuestra SSH Key… Recuerda: LA PUBLICA. Solo tienes que ir a 1Password y copiarla y pegarla. Cerramos el archivo y guardamos con ESC y luego :wq! Y ya está todo listo. Vamos a probar que funciona.
¡Ojo! Si has realizado estos pasos con root y editado authorized_keys, entonces la carpeta .ssh y authorized_keys serán propiedad de root y no te va a funcionar nada. Tienes que cambiar el dueño de la carpeta:
chown -R tu_usuario:tu_usuario /home/tu_usuario/.ssh
Abrimos de nuevo la terminal y ejecutamos de nuevo el comando de conexión SSH anterior. Nada más conectarse al servidor, te deberá aparecer una ventana de 1Password donde te pide permiso para copiar tu clave privada y acceder al servidor. Solo tienes que poner tu huella dactilar en tu sensor del Mac y entrar al servidor.
Ahora puedes dejar la ventana de terminal abierta y con acceso a tu servidor, y configurar el servidor SSH para que no acepte autenticación mediante Passwords en SSH. Tienes que editar el archivo /etc/ssh/sshd_config (en Rocky Linux), y asegurarte de encontrar lo siguiente (sin comentar):
vi /etc/ssh/sshd_config
#Esta opción habilita la autenticación basada en claves públicas.
PubkeyAuthentication yes
#ubicación del archivo que contiene las claves públicas autorizadas para cada usuario.
AuthorizedKeysFile .ssh/authorized_keys
# Deshabilita la autenticación basada en contraseñas.
PasswordAuthentication no
#Opción extra para permitir solo el acceso de determinados usuarios
AllowUsers usuario1 usuario2
Vuelves a salir de la edición con ESC y luego presionas :wq! para guardar el archivo. Tu servidor ya es un poco más seguro.
- Recuerda que todavía tienes abierta otra terminal por si algo ha salido mal. Compruébalo, para no quedarte fuera del servidor.
¿Qué pasa si pierdes la clave privada? Pues que no vas a poder entrar al servidor mediante SSH. La mayoría de los servicios de alojamiento online, ofrecen algún servicio de acceso mediante consola desde su panel de control online. Vas a tener que usarlo para entrar en tu servidor y cambiar algunas opciones para volver a acceder de nuevo mediante password (tendrías que editar el archivo anterior de configuración SSH y poner PasswordAuthentication yes).
Conclusión
¿A qué no es tan complicado activar las SSH Key para acceder de forma segura a tu servidor? Y 1Password lo hace todo mucho más sencillo y seguro. Además, vas a tener una copia de seguridad de tus claves SSH en 1Password (en todos los dispositivos donde lo tengas instalado). Todo está cifrado y vuelto a cifrar, así que no hay peligro.
Con el agente SSH de 1Password todo funciona de manera transparente y rápida. Te puede interesar también: Guía completa para asegurar SSH en Rocky Linux y Sistemas RHEL.