Por qué pasar a claves
Con el acceso por contraseña activado, cualquiera que llegue al puerto SSH del servidor puede seguir probando contraseñas. OpenSSH viene así por defecto: el manual indica que el valor por defecto de PasswordAuthentication es yes. Las claves son mucho más difíciles de adivinar, y desactivar la contraseña también bloquea fallos en la propia comprobación de la contraseña. El fallo de OpenSSH en Alpine Linux de esta semana es un ejemplo: el aviso de Alpine dice que los servidores con el acceso por contraseña desactivado no están afectados.
Necesitas un usuario en el servidor al que ya puedas acceder, con permiso para usar sudo o doas.
1. Crea una clave en tu ordenador
Ejecuta esto en tu propio ordenador, no en el servidor:
ssh-keygen -t ed25519
Pulsa Intro para aceptar la ubicación habitual y escribe una frase de contraseñauna contraseña que protege el propio archivo de la clave, para que una copia robada del archivo no baste para entrar. Obtendrás dos archivos en la carpeta .ssh de tu directorio personal: id_ed25519, la clave privada, que nunca sale de tu ordenador, y id_ed25519.pub, la clave pública, que va al servidor.
2. Copia la clave pública al servidor
En Linux y macOS:
ssh-copy-id usuario@servidor
Te pide la contraseña una última vez y añade la clave a ~/.ssh/authorized_keys en el servidor. Si no tienes ssh-copy-id, por ejemplo en Windows, abre id_ed25519.pub, copia su única línea y pégala en ~/.ssh/authorized_keys en el servidor. La carpeta .ssh solo debe poder leerla tu usuario (chmod 700 ~/.ssh y chmod 600 ~/.ssh/authorized_keys).
3. Prueba la clave antes de cambiar nada
Deja abierta la sesión actual. En una ventana nueva del terminal, ejecuta ssh usuario@servidor. Si te pide la frase de contraseña de la clave, o entra directamente, la clave funciona. Si te pide la contraseña de la cuenta, para y arregla la clave primero, o te quedarás fuera en el siguiente paso.
4. Desactiva el acceso con contraseña
En el servidor, añade estas dos líneas a la configuración del servidor SSH, en /etc/ssh/sshd_config o en un archivo nuevo dentro de /etc/ssh/sshd_config.d/ si tu sistema usa esa carpeta:
PasswordAuthentication no
KbdInteractiveAuthentication no
La segunda línea cierra el otro método parecido a la contraseña, el keyboard-interactiveun método de acceso en el que el servidor hace preguntas, normalmente la contraseña, mediante un aviso; el nombre antiguo de la opción es ChallengeResponseAuthentication. Para la cuenta root, el valor por defecto de OpenSSH, PermitRootLogin prohibit-password, ya bloquea el acceso con contraseña.
Hay una trampa. El manual dice que, para cada opción, "se usará el primer valor obtenido". Algunos sistemas, entre ellos algunas imágenes de nube, traen su propio archivo en sshd_config.d con PasswordAuthentication yes, y si ese archivo se lee antes, tu línea no tiene efecto. El paso 6 explica cómo detectarlo.
5. Revisa el archivo y reinicia el servicio
Ejecuta sudo sshd -t. Comprueba la configuración y no muestra nada si es válida. Después reinicia el servicio SSH:
- Debian y Ubuntu:
sudo systemctl restart ssh - Fedora, Red Hat y similares:
sudo systemctl restart sshd - Alpine:
rc-service sshd restart
Mantén la sesión antigua abierta hasta terminar el siguiente paso.
6. Comprueba que ha funcionado
En el servidor, ejecuta:
sudo sshd -T | grep -i -E 'passwordauthentication|kbdinteractiveauthentication'
sshd -T muestra la configuración que sshd va a usar de verdad. Las dos líneas deben terminar en no. Si alguna dice yes, busca en /etc/ssh/sshd_config.d/ un archivo que la defina antes.
Desde tu ordenador, intenta forzar un acceso con contraseña:
ssh -o PubkeyAuthentication=no usuario@servidor
El servidor debe rechazarlo con "Permission denied (publickey)". Tu ssh usuario@servidor normal debe seguir funcionando con la clave.
Si algo sale mal
Si pierdes el acceso, usa la consola que ofrece tu proveedor de alojamiento o el programa de la máquina virtual, deshaz el cambio y reinicia el servicio SSH. Por eso la sesión antigua se queda abierta hasta el final. Guarda una copia de tu clave privada en un lugar seguro: si pierdes la única copia, necesitarás esa consola para añadir una clave pública nueva.
Fuentes
Fuentes primarias que consultamos para este artículo: