Cómo configurar claves SSH en Debian 11

Introducción

SSH, o shell segura, es un protocolo encriptado utilizado para administrar y comunicarse con servidores. Cuando trabaje con un servidor Debian, es probable que pase la mayor parte de su tiempo en una sesión de terminal conectada a su servidor a través de SSH.

En esta guía, nos centraremos en configurar claves SSH para una instalación de Debian 11 básica. Las claves SSH proporcionan una forma fácil y segura de iniciar sesión en su servidor y se recomiendan para todos los usuarios.

Paso 1: Crear el par de claves RSA

El primer paso es crear un par de claves en la máquina cliente (normalmente su computadora):

  1. ssh-keygen

De forma predeterminada, ssh-keygen creará un par de claves RSA de 3072 bits, que es lo suficientemente seguro para la mayoría de los casos de uso (opcionalmente, puede pasar la bandera -b 4096 para crear una clave de 4096 bits más grande).

Después de ingresar el comando, debería ver la siguiente salida:

Output
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):

Pulse enter para guardar el par de claves en el subdirectorio .ssh/ en su directorio de inicio, o especifique una ruta alternativa.

Si anteriormente había generado un par de claves SSH, es posible que vea el siguiente mensaje:

Output
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

Advertencia: Si decides sobrescribir la clave en el disco, ya no podrás autenticarte utilizando la clave anterior. Ten mucho cuidado al seleccionar sí, ya que este es un proceso destructivo que no se puede revertir.

A continuación, deberías ver el siguiente mensaje:

Output
Enter passphrase (empty for no passphrase):

Aquí opcionalmente puedes ingresar una frase de contraseña segura, lo cual es altamente recomendado. Una frase de contraseña añade una capa adicional de seguridad para evitar que usuarios no autorizados inicien sesión. Para obtener más información sobre seguridad, consulta nuestro tutorial sobre Cómo Configurar la Autenticación Basada en Claves SSH en un Servidor Linux.

Luego deberías ver la siguiente salida:

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

Ahora tienes una clave pública y privada que puedes utilizar para autenticarte. El siguiente paso es colocar la clave pública en tu servidor para poder utilizar la autenticación basada en claves SSH para iniciar sesión.

Paso 2 — Copiar la Clave Pública al Servidor Debian

La forma más rápida de copiar tu clave pública al host Debian es utilizando una utilidad llamada ssh-copy-id. Debido a su simplicidad, este método es altamente recomendado si está disponible. Si no tienes ssh-copy-id disponible en tu máquina cliente, puedes utilizar uno de los dos métodos alternativos proporcionados en esta sección (copiar a través de SSH basado en contraseña o copiar manualmente la clave).

Copiando la Clave Pública Usando ssh-copy-id

La herramienta ssh-copy-id está incluida de forma predeterminada en muchos sistemas operativos, por lo que es posible que la tengas disponible en tu sistema local. Para que este método funcione, debes tener acceso SSH basado en contraseña a tu servidor.

Para usar la utilidad, simplemente necesitas especificar el host remoto al que te gustaría conectarte y la cuenta de usuario a la que tienes acceso SSH basado en contraseña. Esta es la cuenta a la que se copiará tu clave SSH pública.

La sintaxis es:

  1. ssh-copy-id username@remote_host

Podrías ver el siguiente mensaje:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Esto significa que tu ordenador local no reconoce el host remoto. Esto sucederá la primera vez que te conectes a un nuevo host. Escribe “yes” y presiona ENTER para continuar.

A continuación, la utilidad escaneará tu cuenta local en busca de la clave id_rsa.pub que creamos anteriormente. Cuando encuentre la clave, te pedirá la contraseña de la cuenta del usuario remoto:

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:

Escribe la contraseña (no se mostrará lo que escribas por motivos de seguridad) y presiona ENTER. La utilidad se conectará a la cuenta en el host remoto usando la contraseña que proporcionaste. Luego copiará el contenido de tu clave ~/.ssh/id_rsa.pub en un archivo en el directorio ~/.ssh del hogar de la cuenta remota llamado authorized_keys.

Deberías ver la siguiente salida:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

En este punto, tu clave id_rsa.pub ha sido subida a la cuenta remota. Puedes continuar con el Paso 3.

Copiando la Clave Pública Usando SSH

Si no tienes disponible ssh-copy-id, pero tienes acceso SSH basado en contraseña a una cuenta en tu servidor, puedes subir tus claves usando un método SSH convencional.

Podemos hacer esto usando el comando cat para leer el contenido de la clave pública SSH en nuestra computadora local y pasándolo a través de una conexión SSH al servidor remoto.

Por otro lado, podemos asegurarnos de que el directorio ~/.ssh exista y tenga los permisos correctos bajo la cuenta que estamos usando.

Luego podemos enviar el contenido que pasamos a un archivo llamado authorized_keys dentro de este directorio. Usaremos el símbolo de redirección >> para agregar el contenido en lugar de sobrescribirlo. Esto nos permitirá agregar claves sin destruir las claves agregadas anteriormente.

El comando completo se ve así:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Puede que veas el siguiente mensaje:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Esto significa que tu computadora local no reconoce el host remoto. Esto ocurrirá la primera vez que te conectes a un host nuevo. Escribe “yes” y presiona ENTER para continuar.

Después, se te pedirá que ingreses la contraseña de la cuenta de usuario remota:

Output
username@203.0.113.1's password:

Después de ingresar tu contraseña, el contenido de tu clave id_rsa.pub será copiado al final del archivo authorized_keys de la cuenta de usuario remota. Continúa con Paso 3 si esto fue exitoso.

Copiando la Clave Pública Manualmente

Si no tienes acceso SSH basado en contraseña disponible para tu servidor, deberás completar el proceso anterior manualmente.

Agregaremos manualmente el contenido de tu archivo id_rsa.pub al archivo ~/.ssh/authorized_keys en tu máquina remota.

Para mostrar el contenido de tu clave id_rsa.pub, escribe esto en tu computadora local:

  1. cat ~/.ssh/id_rsa.pub

Verás el contenido de la clave, que debería lucir algo como esto:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

Accede a tu host remoto utilizando el método que tengas disponible.

Una vez que tengas acceso a tu cuenta en el servidor remoto, asegúrate de que el directorio ~/.ssh exista. Este comando creará el directorio si es necesario, o no hará nada si ya existe:

  1. mkdir -p ~/.ssh

Ahora, puedes crear o modificar el archivo authorized_keys dentro de este directorio. Puedes agregar el contenido de tu archivo id_rsa.pub al final del archivo authorized_keys, creándolo si es necesario, usando este comando:

  1. echo public_key_string >> ~/.ssh/authorized_keys

En el comando anterior, sustituye el cadena_de_clave_pública con la salida del comando cat ~/.ssh/id_rsa.pub que ejecutaste en tu sistema local. Debería comenzar con ssh-rsa AAAA....

Finalmente, nos aseguraremos de que el directorio ~/.ssh y el archivo authorized_keys tengan los permisos apropiados establecidos:

  1. chmod -R go= ~/.ssh

Esto elimina recursivamente todos los permisos de “grupo” y “otros” para el directorio ~/.ssh/.

Si estás usando la cuenta root para configurar claves para una cuenta de usuario, también es importante que el directorio ~/.ssh pertenezca al usuario y no a root:

  1. chown -R sammy:sammy ~/.ssh

En este tutorial, nuestro usuario se llama sammy, pero debes sustituir el nombre de usuario adecuado en el comando anterior.

Ahora puedes intentar la autenticación sin contraseña con tu servidor Debian.

Paso 3 — Autenticarse en el servidor Debian usando claves SSH

Si has completado con éxito uno de los procedimientos anteriores, deberías poder iniciar sesión en el host remoto sin la contraseña de la cuenta remota.

El proceso general es el mismo:

  1. ssh username@remote_host

Si es la primera vez que te conectas a este host (si usaste el último método mencionado), es posible que veas algo como esto:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Esto significa que tu computadora local no reconoce el host remoto. Escribe “yes” y luego presiona ENTER para continuar.

Si no proporcionaste una frase de paso para tu clave privada, iniciarás sesión de inmediato. Si proporcionaste una frase de paso para la clave privada cuando creaste la clave, se te pedirá que la ingreses ahora (ten en cuenta que tus pulsaciones de teclas no se mostrarán en la sesión de terminal por seguridad). Después de autenticarte, debería abrirse una nueva sesión de shell para ti con la cuenta configurada en el servidor Debian.

Si la autenticación basada en clave fue exitosa, continúa para aprender cómo asegurar aún más tu sistema deshabilitando la autenticación por contraseña.

Paso 4 — Deshabilitar la Autenticación por Contraseña en tu Servidor

Si pudiste iniciar sesión en tu cuenta usando SSH sin una contraseña, has configurado con éxito la autenticación basada en clave SSH para tu cuenta. Sin embargo, tu mecanismo de autenticación basado en contraseña aún está activo, lo que significa que tu servidor aún está expuesto a ataques de fuerza bruta.

Antes de completar los pasos en esta sección, asegúrese de tener configurada la autenticación basada en claves SSH para la cuenta root en este servidor, o preferiblemente, que tenga configurada la autenticación basada en claves SSH para una cuenta no root en este servidor con privilegios de sudo. Este paso bloqueará los inicios de sesión basados en contraseñas, por lo que asegurarse de que aún podrá obtener acceso administrativo es crucial.

Una vez que haya confirmado que su cuenta remota tiene privilegios administrativos, inicie sesión en su servidor remoto con claves SSH, ya sea como root o con una cuenta con privilegios de sudo. Luego, abra el archivo de configuración del demonio SSH:

  1. sudo nano /etc/ssh/sshd_config

Dentro del archivo, busque una directiva llamada PasswordAuthentication. Esto puede estar comentado. Descomente la línea y establezca el valor en “no”. Esto desactivará su capacidad para iniciar sesión a través de SSH utilizando contraseñas de cuenta:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Guarde y cierre el archivo cuando haya terminado presionando CTRL + X, luego Y para confirmar la guardia del archivo, y finalmente ENTER para salir de nano. Para implementar realmente estos cambios, necesitamos reiniciar el servicio sshd:

  1. sudo systemctl restart ssh

Como precaución, abra una nueva ventana de terminal y pruebe que el servicio SSH esté funcionando correctamente antes de cerrar esta sesión:

  1. ssh username@remote_host

Una vez que haya verificado su servicio SSH, puede cerrar todas las sesiones de servidor actuales de forma segura.

El demonio SSH en su servidor Debian ahora solo responde a las claves SSH. La autenticación basada en contraseñas se ha desactivado correctamente.

Conclusión

Ahora deberías tener configurada la autenticación basada en clave SSH en tu servidor, lo que te permite iniciar sesión sin proporcionar una contraseña de cuenta.

Si deseas obtener más información sobre cómo trabajar con SSH, echa un vistazo a nuestra Guía Esencial de SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11