Guía para configurar claves SSH en un servidor Linux paso a paso

Guía para configurar claves SSH

¿Cómo configurar claves SSH en un servidor Linux o implementar la autenticación con clave pública? Este artículo incluye una guía paso a paso de cómo configurar claves SSH en un servidor Linux para mejorar la seguridad al conectarse de forma remota.

Existen diferentes opciones para conectarse de forma remota y segura a un servidor según el sistema operativo que utilicemos. En el caso de Linux, el protocolo SSH es el más utilizado. Así que en este artículo queremos hablar sobre la configuración de claves SSH para mejorar aún más la seguridad al conectarnos a nuestros servidores. Empecemos por presentar brevemente SSH.

El protocolo SSH proporciona un método seguro para acceder a un recurso privado, mediante el uso de un usuario y una contraseña, de forma remota. Sin embargo, este sistema tiene un problema: la contraseña podría ser capturada por cualquier atacante, lo que pondría en riesgo la información que tengamos guardada en su interior. De ahí la importancia de usar un sistema de autenticación adicional: las claves SSH. Estas, al contrario que las contraseñas, son casi imposibles de descifrar.

¿Qué es la autenticación con clave pública?

La autenticación con clave pública es un método de seguridad alternativo a las contraseñas, mucho más difícil de hackear y, por lo tanto, más seguro. Este método de autenticación es recomendable usarlo para acceder tanto a servidores cloud como a servidores bare-metal.

¿Qué son las claves SSH?

La clave SSH consiste en la generación de un par de claves que proporcionan dos largas cadenas de caracteres —una pública y una privada—. La clave pública se instala en cualquier servidor y luego se desbloquea mediante la conexión con un cliente SSH que hace uso de la clave privada. Si las dos claves coinciden, el servidor SSH permite el acceso sin necesidad de utilizar una contraseña. No obstante, para añadir una capa de seguridad adicional, siempre podemos aumentar la protección de la clave privada usando una contraseña.

En este artículo vamos a explicar cómo configurar la autenticación con SSH con claves ed25519 y claves RSA. A continuación definimos brevemente en qué consisten estos sistemas criptográficos.

¿Qué es ed25519?

En la criptografía de clave pública, el algoritmo de firma digital de curva de Edwards o ed25519 es un esquema de firma digital que utiliza una variante de la firma Schnorr basada en curvas de Edwards. Está diseñado para ser más rápido que los esquemas de firma digital existentes, sin sacrificar la seguridad. El algoritmo de firma digital de curva de Edwards también se conoce como edDSA, del inglés Edwards-curve Digital Signature Algorithm.

¿Qué es RSA?

En la criptografía de clave pública, el sistema criptográfico RSA es el algoritmo basado en la factorización de números enteros más utilizado, tanto para cifrar como para firmar digitalmente. RSA es el acrónimo de Rivest, Shamir and Adleman, los apellidos de los creadores del algoritmo —Ron Rivest, Adi Shamir y Leonard Adleman—.

Configurar la autenticación con claves ed25519 paso a paso

A continuación explicamos paso a paso cómo crear las claves SSH para acceder de forma segura a servidores virtuales o bare-metal Linux, con un par de claves ed25519.

1º.- Crear el par de claves ed25519

El primer paso consiste en crear el par de claves ed25519 en la máquina cliente, que por lo general es el equipo que solemos utilizar. Para ello ejecutamos la siguiente instrucción en la línea de comandos:

$ ssh-keygen -t ed25519

Tras ejecutar la instrucción, obtendremos la siguiente respuesta, en la que se indica que la creación del par de claves pública y privada está en proceso:

Generating public/private ed25519 key pair.

2º.- Almacenar las claves

Una vez ejecutada la instrucción para generar las claves, se nos pedirá que indiquemos la ruta en la que queremos almacenar la clave.

Enter file in which to save the key (/home/demo/.ssh/id_ed25519):

Nota: Si no escribimos nada y pulsamos la tecla «Intro», la clave se almacenará en la ruta que aparece entre paréntesis.

3º.- Generar una contraseña para la clave privada

Tras indicar la ruta en la que se almacenará la clave, lo siguiente que tendremos que hacer es indicar una contraseña:

Enter passphrase (empty for no passphrase):

Este paso es opcional. Así que, si no queremos incluir una contraseña, podemos dejarlo en blanco (como se indica entre paréntesis en la línea de comandos) y pulsar «Intro». Sin embargo, es recomendable crear una contraseña para la clave privada, para añadir una capa de seguridad adicional. De este modo, aunque algún ciberdelincuente consiguiera la clave, no podría hacer uso de ella mientras no diera con la contraseña. Por supuesto, lo más recomendable es crear siempre contraseñas seguras.

Una vez finalizado este paso, si todo va bien, deberíamos ver en pantalla algo parecido a esto:

$ ssh-keygen -t ed25519
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_ed25519
Your public key has been saved in /home/demo/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:EGx5HEXz7EqKigIxHHWKpCZItSj1Dy9Dqc5cYae+1zc demo@xyz.local
The key's randomart image is:
+--[ED25519 256]--+
| o+o o.o.++      |
|=oo.+.+.o  +     |
|*+.oB.o.    o    |
|*. + B .   .     |
| o. = o S . .    |
|.+ o o . o .     |
|. + . ... .      |
|.  . o. . E      |
| .. o.   . .     |
+----[SHA256]-----+
  • La clave pública se guardará en: /home/demo/.ssh/id_ed25519.pub.
  • La clave privada se guardará en: /home/demo/.ssh/id_ed25519.

4º.- Copiar la clave pública

Tras haber generado las claves, es hora de colocar la clave pública en el servidor virtual donde la queremos utilizar. Podemos copiar la clave pública dentro del fichero «autorized_keys» en el servidor virtual con la instrucción «ssh-copy-id». Para que se copie correctamente hay que indicar la dirección IP de la máquina, como se indica a continuación:

ssh-copy-id user@123.45.67.89

Una vez finalizado este paso, accede al servidor Linux para comprobar que la configuración se haya realizado correctamente. Al acceder al servidor, si hemos generado una contraseña para la clave privada, el cliente SSH solicitará que la introduzcamos. Si no lo hemos hecho, podremos acceder al servidor sin necesidad de contraseña; únicamente con el par de claves SSH.

5º.- Desactivar el acceso para el usuario root

Este último paso es opcional y sirve para mejorar aún más la seguridad. Una vez hayamos copiado las claves SSH en el servidor y nos hayamos asegurado de que podemos acceder, podemos restringir el acceso vía SSH al usuario root. Esto permite el acceso únicamente mediante las claves SSH que hemos generado. Para hacer esto tenemos que abrir el archivo de configuración de SSH:

$ sudo nano /etc/ssh/sshd_config

Dentro de este archivo buscamos la línea donde aparezca «PasswordAuthentication» y la modificamos para asegurarnos de que solo se pueda acceder usando las claves SSH:

PasswordAuthentication no

Nota: Si la línea de «PasswordAuthentication» no existe, tendremos que crearla.

Por último, guardamos los cambios y recargamos SSH para que se efectúen:

$ sudo systemctl reload sshd

Una vez completados todos los pasos, dispondremos de una máquina virtual más segura y solo podremos acceder a ella si disponemos de las claves SSH generadas. Asimismo, para más seguridad, antes de cerrar la sesión SSH, deberíamos probar la conexión desde otro terminal para verificar que funciona correctamente.

Configurar la autenticación con claves RSA paso a paso

Para los sistemas antiguos que no soportan las claves ed25519, a continuación explicamos paso a paso cómo crear las claves SSH con un par de claves RSA, para acceder de forma segura a servidores virtuales o bare-metal Linux.

1º.- Crear el par de claves RSA

El primer paso consiste en crear el par de claves RSA en la máquina cliente, que por lo general es el equipo que solemos utilizar. Para ello ejecutamos la siguiente instrucción en la línea de comandos:

$ ssh-keygen -t rsa

2º.- Almacenar las claves y la contraseña

Una vez hayamos ejecutado la instrucción para generar las claves, se nos pedirá que indiquemos en qué ruta queremos almacenar la clave:

Enter file in which to save the key (/home/demo/.ssh/id_rsa):

Nota: Si no escribimos nada y pulsamos la tecla «Intro», la clave se almacenará en la ruta que aparece entre paréntesis.

3º.- Generar una contraseña para la clave privada

Una vez indicada la ruta en la que se almacenará la clave, podemos incluir una contraseña:

Enter passphrase (empty for no passphrase):

Si no queremos usar una contraseña, podemos dejarlo en blanco como se indica entre paréntesis y pulsar «Intro». Sin embargo, es recomendable incluirla para añadir una capa de seguridad adicional. De este modo, aunque algún ciberdelincuente consiguiera la clave, no podrían hacer uso de ella mientras no diera con la contraseña. El único inconveniente de crear una contraseña es que habría que escribirla cada vez que se utilizara. Por supuesto, lo más recomendable es crear siempre contraseñas seguras.

Una vez finalizado este paso, si todo va bien, deberíamos ver en pantalla algo parecido a esto:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/demo/.ssh/id_rsa.
Your public key has been saved in /home/demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@xyz.local
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+
  • La clave pública se guardará en: /home/demo/.ssh/id_rsa.pub.
  • La clave privada se guardará en: /home/demo/.ssh/id_rsa.

4º.- Copiar la clave pública

Una vez hayamos generado las claves, es hora de colocar la clave pública en el servidor virtual donde la queremos utilizar. Podemos copiar la clave pública dentro del fichero «autorized_keys» en el servidor virtual con la instrucción «ssh-copy-id». Para que se copie correctamente hay que indicar la dirección IP de la máquina, como se indica a continuación:

ssh-copy-id user@123.45.67.89

Otra alternativa es pegar la clave utilizando SSH:

cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

Independientemente del comando que utilicemos, deberíamos ver algo parecido a esto:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password:
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:
  ~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

5º.- Desactivar el acceso para el usuario root

Este último paso es opcional y sirve para mejorar aún más la seguridad. Una vez hayamos copiado las claves SSH en el servidor y nos hayamos cerciorado de que podemos acceder, podemos restringir el acceso vía SSH al usuario root. Esto permite el acceso únicamente mediante las claves SSH que hemos generado. Para hacer esto tenemos que abrir el archivo de configuración de SSH:

sudo nano /etc/ssh/sshd_config

Dentro de este archivo buscamos la línea donde aparezca «PermitRootLogin» y la modificamos para asegurarnos de que solo se pueda acceder usando las claves SSH:

PermitRootLogin without-password

Por último, recargamos SSH para que se efectúen los cambios:

reload ssh

Una vez completados todos los pasos, dispondremos de una máquina virtual más segura y solo podremos acceder a ella si disponemos de las claves SSH generadas. Asimismo, para más seguridad, antes de cerrar la sesión SSH, deberíamos probar la conexión desde otro terminal para verificar que funciona correctamente.

Si te ha gustado, compártelo en redes sociales

Share on facebook
Share on twitter
Share on linkedin
Share on pinterest
Share on whatsapp
Share on email