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):
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:
OutputGenerating 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:
OutputEnter 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:
OutputYour 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:
Podrías ver el siguiente mensaje:
OutputThe 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:
OutputNumber 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í:
Puede que veas el siguiente mensaje:
OutputThe 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:
Outputusername@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:
Verás el contenido de la clave, que debería lucir algo como esto:
Outputssh-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:
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:
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:
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
:
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:
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:
OutputThe 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:
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:
...
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
:
Como precaución, abra una nueva ventana de terminal y pruebe que el servicio SSH esté funcionando correctamente antes de cerrar esta sesión:
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