Configure la clave de autenticación para el inicio de sesión SSH remoto en Ubuntu 24.04
Este es un tutorial simple que muestra cómo deshabilitar la autenticación de contraseña y usar la clave SSH en su lugar para iniciar sesión remotamente en un servidor o escritorio Ubuntu remoto.
SSH (Secure Shell) es una forma popular y segura de iniciar sesión en servidores remotos y/o transferir datos entre máquinas locales y remotas. Cuando intenta conectarse por SSH a un servidor remoto, generalmente solicita la contraseña del usuario para la autenticación.
Sin embargo, las contraseñas no son las más seguras. Por lo general, no son complejos ni lo suficientemente largos como para protegerlos de ataques, o son difíciles de recordar y escribir una y otra vez en cada conexión.
Para estar más seguro y ahorrar tiempo, la autenticación de clave segura es una buena opción. Y aquí se explica cómo configurarlo paso a paso.
Paso 1: generar un par de claves seguras
Un par de claves SSH normalmente incluye claves privada
y pública
. El cliente local posee la clave privada, mientras que la clave pública asociada se carga en el servidor remoto.
Cuando se inicia una conexión SSH, el servidor prueba si el cliente tiene la clave privada. En caso afirmativo, permite la conexión. De lo contrario, recurra a otro método de autenticación, si corresponde (por ejemplo, solicitar una contraseña).
Para generar un par de claves, abra la terminal (Ctrl+Alt+T) y ejecute el siguiente comando en su computadora local:
ssh-keygen
Ejecute sudo apt install openssh-client
si no tiene instalado el paquete del cliente SSH.
El comando creará de forma predeterminada un par de claves ed25519. Luego, le pedirá que presione Enter para guardar en el archivo de clave predeterminado o escriba manualmente /home/USER_NAME/.ssh/key_name_here.
A continuación, debe escribir una frase de contraseña (solo escríbala en mente, sin comentarios de asterisco) y confirmar para cifrar la clave, de modo que incluso si perdió la clave, otros no podrán usarla sin la frase de contraseña.
Paso 2: copie la clave pública al servidor remoto
Después del paso 1, debería tener los archivos de clave pública y privada en la carpeta local .ssh
.
Ejecute el comando para navegar a esa carpeta y enumere el contenido de la carpeta. Luego, verá los 2 archivos clave.
cd ~/.ssh && ls
NOTA: Antes de ejecutar el siguiente comando, asegúrese de que el servidor remoto tenga openssh-server
instalado y habilitado ssh.service (ssh.socket para 24.04). Además, debe permitir la autenticación de contraseña.
Para cargar el público en el servidor SSH, ejecute el siguiente comando similar en la computadora local:
ssh-copy-id -i ~/.ssh/my_ssh_key.pub -p 22366 ji@localhost
En el comando, debe reemplazar las siguientes opciones en consecuencia:
-i ~/.ssh/my_ssh_key.pub
– identifica el archivo clave. Reemplace el nombre de la clavemy_ssh_key
con el suyo según el Paso 1.-p 22366
: indica el puerto de escucha del servidor SSH remoto. El valor predeterminado es 22.ji@localhost
– 'ji' es el nombre de usuario en el servidor remoto al que estoy intentando iniciar sesión, "localhost" es el nombre del host remoto. En este caso, estoy intentando conectar SSH a una máquina virtual. Debe reemplazarlo con nombre de usuario@dirección_ip_servidor.
Después de ejecutar con éxito el comando ssh-copy-id
, el servidor SSH remoto ahora debería tener la "clave pública" escrita como una nueva línea en el ~/.ssh/authorized_keys
predeterminado. archivo.
Luego puede probar el comando ssh -p xxx usuario@dirección-ip
en la computadora local. Debería aparecer un cuadro de diálogo solicitando la contraseña (que configuró en el Paso 1) para desbloquear la clave privada.
Si no desea ingresar la contraseña una y otra vez, simplemente marque "Desbloquear automáticamente esta clave cada vez que inicie sesión" en el cuadro de diálogo emergente.
En caso de que NO funcione, asegúrese de que su servidor SSH tenga "pubkeyauthentication
" configurado en "yes" e incluya ".ssh/authorized_keys" como "authorizedkeysfile
", aunque Por lo general, son configuraciones predeterminadas del demonio SSH.
Para identificar, use el comando:
sudo sshd -T |grep -e "authorizedkeysfile" -e "pubkeyauthentication"
Paso 3: deshabilite el inicio de sesión SSH con contraseña
Si todo va bien, puedes desactivar la autenticación de contraseña para proteger el servidor SSH, aunque esto es OPCIONAL.
1. Primero, conéctese a su servidor SSH remoto. Luego, ejecute el comando para editar el archivo de configuración del demonio sshd:
sudo nano /etc/ssh/sshd_config
Cuando se abra el archivo, haga:
- Descubra “PasswordAuthentication sí” y configúrelo en PasswordAuthentication no. Elimina “#” si lo tiene al principio, o no funcionará.
- Si la línea KbdInteractiveAuthentication está habilitada (sin # al principio), configúrela en no. Se utiliza para el inicio de sesión con contraseña de un solo uso, que sin embargo también permite el inicio de sesión con contraseña estática a menos que lo haya desactivado en la configuración de PAM.
- Si ChallengeResponseAuthentication está habilitado, configúrelo también en no.
Finalmente, presione Ctrl+S para guardar el archivo y Ctrl+X para salir.
2. Luego, ejecute el comando para enumerar el contenido del directorio /etc/ssh/sshd_config.d/
:
ls /etc/ssh/sshd_config.d/
¡El directorio por defecto está vacío! Pero cualquier archivo .conf
en ese directorio puede anular sus configuraciones SSH, ya que se cargan primero en /etc/ssh/sshd_config
.
3. Para verificar su configuración y verificar si hay algún error, use el comando:
sudo sshd -T | grep authentication
4. Para aplicar cambios, ejecute los 2 comandos siguientes uno por uno:
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
Para Ubuntu 22.04 antiguo y anteriores, puede ejecutar el siguiente comando para aplicar los cambios:
sudo systemctl status ssh.service