Cómo configurar claves SSH en Rocky Linux 9

Introducción

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

En esta guía, nos enfocaremos en configurar claves SSH para un servidor Rocky Linux 9. Las claves SSH proporcionan un método sencillo y seguro para 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 (generalmente su computadora local):

  1. ssh-keygen

De forma predeterminada, ssh-keygen creará un par de claves RSA de 2048 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 el siguiente aviso:

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

Presione 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 aviso:

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

Si eliges sobrescribir la clave en el disco, no podrás autenticarte usando 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í puedes opcionalmente ingresar una contraseña segura, lo cual es altamente recomendado. Una contraseña agrega una capa adicional de seguridad a tu clave para evitar que usuarios no autorizados inicien sesión.

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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

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

Paso 2: Copiar la clave pública en tu servidor Rocky Linux

La forma más rápida de copiar tu clave pública al host de Rocky Linux es usando una herramienta llamada ssh-copy-id. Este método es altamente recomendado si está disponible. Si no tienes ssh-copy-id en tu máquina cliente, puedes usar uno de los dos métodos alternativos que se describen a continuación (copiar mediante SSH basado en contraseña o copiar manualmente la clave).

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

La herramienta ssh-copy-id está incluida por defecto 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, solo necesitas especificar el host remoto al que te gustaría conectar 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:

  1. ssh-copy-id username@remote_host

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 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 de usuario remota:

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 (tu escritura no se mostrará por razones 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 el archivo ~/.ssh/authorized_keys de la cuenta remota.

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 llave 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 llaves usando un método SSH más convencional.

Podemos hacer esto usando el comando cat para leer el contenido de la llave pública SSH en nuestra computadora local y enviando eso 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 añadir el contenido en lugar de sobrescribirlo. Esto nos permitirá agregar llaves sin destruir las que se hayan añadido previamente.

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 sucederá la primera vez que te conectes a un nuevo host. Escribe yes y presiona ENTER para continuar.

Después, deberías recibir un aviso para ingresar la contraseña de la cuenta de usuario remoto:

Output
username@203.0.113.1's password:

Después de ingresar tu contraseña, el contenido de tu clave id_rsa.pub se copiará al final del archivo authorized_keys de la cuenta de usuario remoto. 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 en tu servidor, deberás completar el proceso anterior manualmente.

Adjuntaremos 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 parecerse a esto:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

Inicia sesión en tu host remoto utilizando el método 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 public_key_string 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 de forma recursiva todos los permisos de “grupo” y “otros” para el directorio ~/.ssh/.

Si estás utilizando 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 podemos intentar la autenticación basada en claves con nuestro servidor Rocky Linux.

Paso 3 — Iniciar sesión en tu servidor Rocky Linux usando claves SSH

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

El proceso inicial es el mismo que con la autenticación basada en contraseñas:

  1. ssh username@remote_host

Si es la primera vez que se conecta a este host (si usó el último método anterior), es posible que vea 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 su computadora local no reconoce el host remoto. Escriba y luego presione ENTER para continuar.

Si no proporcionó una frase de paso al crear su par de claves en el paso 1, se le iniciará sesión de inmediato. Si proporcionó una frase de paso, se le pedirá que la ingrese ahora. Después de autenticarse, se debería abrir una nueva sesión de shell para usted con la cuenta configurada en el servidor Rocky Linux.

Si la autenticación basada en clave fue exitosa, continúe aprendiendo cómo asegurar aún más su sistema deshabilitando la autenticación basada en contraseñas de su servidor SSH.

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

Si pudo iniciar sesión en su cuenta usando SSH sin una contraseña, ha configurado correctamente la autenticación basada en clave SSH para su cuenta. Sin embargo, su mecanismo de autenticación basado en contraseñas todavía está activo, lo que significa que su servidor todavía está expuesto a ataques de fuerza bruta.

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

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

  1. sudo vi /etc/ssh/sshd_config

Dentro del archivo, busca una directiva llamada PasswordAuthentication. Esto puede estar comentado con un signo de #. Presiona i para poner vi en modo de inserción, y luego descomenta la línea y establece el valor en no. Esto deshabilitará tu capacidad para iniciar sesión a través de SSH usando contraseñas de cuenta:

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

Cuando hayas terminado de hacer cambios, presiona ESC y luego :wq para escribir los cambios en el archivo y salir. Para implementar realmente estos cambios, necesitamos reiniciar el servicio sshd:

  1. sudo systemctl restart sshd

Como precaución, abre una nueva ventana de terminal y prueba que el servicio SSH esté funcionando correctamente antes de cerrar tu sesión actual:

  1. ssh username@remote_host

Una vez que hayas verificado que tu servicio SSH sigue funcionando correctamente, puedes cerrar todas las sesiones de servidor actuales de forma segura.

El demonio SSH en tu servidor Rocky Linux ahora solo responde a 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 claves SSH en tu servidor, lo que te permite iniciar sesión sin proporcionar una contraseña de cuenta.

Si deseas aprender más 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-rocky-linux-9