Configure un inicio de sesión seguro sin contraseña en su servidor Ubuntu remoto usando claves SSH
SSH es un protocolo de red cliente-servidor seguro que ayuda a una computadora cliente a conectarse y comunicarse con un servidor remoto. La conexión SSH garantiza que los comandos que se escriben en el terminal se envíen al servidor remoto a través de un canal cifrado.
Hay dos tipos de mecanismos de autenticación que se utilizan para conectarse al servidor remoto, la autenticación basada en contraseña (propensa a ataques de fuerza bruta) y la autenticación basada en claves SSH (que es muy segura).
En la autenticación basada en claves SSH, se genera un par de claves en el equipo cliente, denominado clave pública y clave privada. Una copia de esta clave pública está disponible en el servidor remoto. Cuando un cliente envía una solicitud de conexión al servidor, el servidor genera una cadena aleatoria y la cifra con la clave pública. Esta cadena solo se puede descifrar utilizando la clave privada disponible en el equipo cliente. Este método garantiza que solo los clientes que contengan la clave privada puedan acceder al servidor.
En esta guía, veremos cómo configurar las claves SSH en el servidor Ubuntu 20.04 LTS.
Vea si tiene alguna clave SSH existente en su computadora
Para comprobar si ya existe un par de claves SSH en su computadora, escriba este comando en su terminal.
ls -l ~/.ssh/id_*.pub
Si el comando anterior devuelve no such file or directory
o no matches found
, significa que el par de claves SSH no existe.
Si tiene un par de claves SSH existente, puede usar el mismo par de claves para acceder a dos servidores remotos, o también puede crear un par de claves diferente con un nombre diferente. Pasemos al siguiente paso y veamos cómo generar claves SSH para ambos casos.
Creación de claves SSH en una computadora cliente
Para generar un nuevo par de claves SSH en su computadora, escriba el comando como se muestra a continuación.
ssh-keygen
Por defecto, las claves SSH son de 2048 bits. Para mayor seguridad, si desea generar claves SSH con bits más altos, utilice el siguiente comando.
ssh-keygen -b 4096
Si el comando se ejecuta correctamente, aparecerá el siguiente mensaje en su pantalla.
generando un par de claves rsa pública / privada.
Ingrese el archivo en el que guardar la clave (/home/harshit/.ssh/id_rsa):
Ahora, si no tiene ningún par de claves SSH existente en su computadora, simplemente presione Enter
, pero si tiene una clave SSH existente, guarde la clave con un nombre de archivo diferente como se muestra a continuación.
Ingrese el archivo en el que guardar la clave (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_xxx
Reemplace xxx
al final del nombre del archivo con un nombre apropiado, como se muestra a continuación y presione Enter
.
Ingrese el archivo en el que guardar la clave (/home/your_name/.ssh/id_rsa): /home/your_name/.ssh/id_rsa_client_1
El siguiente mensaje le pedirá que ingrese una frase de contraseña de una longitud arbitraria, garantizará la seguridad de dos niveles en su dispositivo.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Al ingresar esta frase de contraseña, se asegurará de que, incluso si una persona tiene acceso a su clave privada, no podrá acceder a su servidor remoto sin esta frase de contraseña.
Una vez que se completa todo el proceso, aparece el siguiente mensaje en su pantalla.
Las claves SSH se han generado en su sistema. Ahora es el momento de copiar la clave pública en el servidor remoto.
Copiar la clave pública al servidor Ubuntu remoto
El método más fácil y rápido para copiar la clave pública al servidor remoto es mediante la ssh-copy-id
utilidad. Pero si esta utilidad no está disponible en su máquina por algún motivo, también puede utilizar otros métodos proporcionados en esta sección.
Usando la utilidad ssh-copy-id
La ssh-copy-id
utilidad está disponible de forma predeterminada en su máquina Ubuntu, que copia la clave pública de su dispositivo al directorio apropiado de su máquina Ubuntu remota.
Para copiar la clave ssh pública, simplemente escriba el comando en su terminal, como se muestra a continuación.
ssh-copy-id [email protected]
Reemplace username
y hostname
en el comando anterior con el nombre de usuario y el nombre de host de su servidor.
El siguiente mensaje aparecerá en su terminal si se está conectando a su host por primera vez, escriba yes
y presione Enter
.
No se puede establecer la autenticidad del host '172.105.XX.XX (172.105.XX.XX)'.
La huella digital de la clave ECDSA es xx: xx: xx: xx: 77: fe: 73: xx: xx: 55: 00: ad: d6: xx: xx: xx.
¿Está seguro de que desea continuar conectándose (sí / no)? sí
Ahora la ssh-copy-id
utilidad buscará el archivo con el nombre id_rsa.pub
que contiene la clave SSH pública. Una vez que se complete el proceso de escaneo, se le pedirá que ingrese la contraseña de su servidor remoto, como se muestra a continuación. Escriba la contraseña y presione Enter
.
/ usr / bin / ssh-copy-id: INFO: intentando iniciar sesión con las nuevas claves, para filtrar las que ya están instaladas
/ usr / bin / ssh-copy-id: INFO: quedan 1 clave por instalar; si se le solicita ahora, debe instalar las nuevas claves
Contraseña de [email protected] :
Una vez que se agrega la clave, el siguiente mensaje aparecerá en su terminal como salida.
Número de llaves agregadas: 1
Ahora intente iniciar sesión en la máquina, con: "ssh ' [email protected] '" y verifique que solo se hayan agregado las claves que deseaba.
En caso de que tenga varias claves SSH en su computadora cliente, para copiar la clave pública apropiada a su computadora remota, escriba el comando en el patrón que se muestra a continuación.
ssh-copy-id -i id_rsa_xxx.pub [email protected]
💡 Sugerencia
No olvide poner .pub al final del nombre del archivo mientras escribe en la terminal.
Copia de la clave pública mediante el método de tubería
Escriba el siguiente comando en la terminal si la ssh-copy-id
utilidad no está disponible. Este comando puede parecer un poco más largo, pero funciona correctamente.
cat ~/.ssh/id_rsa.pub | ssh [email protected]_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Reemplace remote_username
y server_ip_address
con su nombre de usuario y dirección IP.
Si tiene varias claves SSH disponibles en su computadora, reemplácelas id_rsa.pub
con el archivo de clave SSH pública de su elección. Por ejemplo id_rsa_client_1.pub
,.
Escriba la contraseña del usuario remoto cuando se le solicite y presione Enter
.
[email protected]'s password:
Una vez que escriba la contraseña, el id_rsa.pub
archivo se copiará al authorized_keys
archivo del servidor remoto.
Copiar manualmente la clave pública
Utilice este método cuando no tenga acceso a su sistema remoto a través de la autenticación de contraseña.
Abra el id_rsa.pub
archivo usando el cat
comando en la terminal. También puede abrirlo desde un editor de texto, el propósito es simplemente copiar el contenido del archivo.
cat ~/.ssh/id_rsa.pub
El contenido del archivo se verá como se muestra a continuación.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH [email protected] _PC
Ahora, inicie sesión en su servidor remoto y pegue el contenido copiado usando el comando que se muestra a continuación. Reemplace el above_string
con el contenido copiado.
echo above_string >> ~/.ssh/authorized_keys
Configuración de varias claves SSH (opcional)
Este paso es para personas que tienen varias claves SSH configuradas en su computadora cliente. Omita esta sección si solo tiene una configuración de clave SSH.
Para administrar múltiples claves SSH, ahora crearemos un config
archivo dentro del .ssh
directorio usando el comando que se muestra a continuación.
cd ~/.ssh
vim config
Escriba i
para ingresar al modo de comando y escriba los detalles de varios hosts, como se muestra en el siguiente ejemplo:
Host remote-ubuntu-server
HostName 172.105.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_1
Host remote-ubuntu-server
HostName 172.106.XX.XX
User root
IdentityFile ~/.ssh/id_rsa_client_2
Del mismo modo, escriba los detalles de otros servidores remotos y sus claves. Una vez finalizado el proceso, presione Esc
y :wq
para guardar y salir.
Ahora, los procesos posteriores son los mismos para tener una o varias claves SSH en la computadora cliente.
Inicie sesión en su servidor remoto usando claves SSH
Una vez que se complete el proceso de copia de su clave pública, inicie sesión en su servidor remoto escribiendo el comando como se muestra a continuación.
ssh [email protected]_ip_address
Si proporcionó la frase de contraseña mientras generaba el par de claves, se le pedirá que la ingrese. Se abrirá una nueva sesión después de que se complete el proceso de autenticación.
Ahora ha configurado correctamente la autenticación basada en claves SSH en su servidor remoto. Pero la autenticación basada en contraseña todavía está activa en su servidor, esto significa que su servidor más remoto todavía es propenso a ataques de fuerza bruta.
Entonces, ahora deshabilitaremos el mecanismo de inicio de sesión basado en contraseña por completo desde nuestro servidor remoto.
Deshabilitar el mecanismo de inicio de sesión basado en contraseña
Antes de realizar cualquier cambio, asegúrese de que el usuario raíz o cualquier usuario habilitado para sudo para su cuenta remota tenga acceso a su servidor mediante el sistema de autenticación basado en claves SSH. Este paso bloqueará o deshabilitará el inicio de sesión basado en contraseña por completo, por lo que es crucial que al menos un usuario con privilegios de root tenga acceso al servidor a través de la clave SSH.
Inicie sesión en su servidor Ubuntu remoto y escriba el comando que se muestra a continuación.
sudo vim /etc/ssh/sshd_config
- Presione
Esc
, /
escriba 'PasswordAuthentication' y presione enter
.
- Ahora presione
i
y cambie el valor de 'PasswordAuthentication yes' a 'PasswordAuthentication no'.
- Presione
Esc
y repita el proceso anterior para encontrar 'ChallengeResponseAuthentication', 'UsePAM', y cambie sus valores a no
también.
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Una vez que todos los valores estén configurados no
, presione Esc
, escriba :wq
y presione enter
.
Para activar todos los cambios, reinicie el ssh
servicio usando el siguiente comando.
sudo systemctl restart ssh
Ahora abra una nueva ventana de terminal en su computadora y verifique que la autenticación de su clave SSH esté funcionando correctamente antes de cerrar la sesión actual.
Una vez que se complete el proceso de verificación, cierre todas las sesiones en ejecución.
Ahora hemos configurado con éxito la autenticación basada en claves SSH en nuestro servidor Ubuntu 20.04. Ahora nadie puede iniciar sesión en su servidor utilizando un mecanismo de inicio de sesión basado en contraseña.