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 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 bare-metal o virtuales 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.

¿Necesitas ayuda con la administración de sistemas? Podemos ayudarte.

Si te ha gustado, compártelo en redes sociales

Servicios gestionados

Administración de sistemas integral o parcial, con partners especializados.

DESCUBRIR MÁS
Configuración de las cookies
Stackscale, Grupo Aire logo

Al aceptar las cookies acepta voluntariamente el tratamiento de sus datos. Esto también incluye, por un tiempo limitado, su consentimiento de acuerdo con el Artículo 49 (1) (a) RGPD para el procesamiento de datos fuera del EEE, por ejemplo, en los EE.UU. En estos países, a pesar de una cuidadosa selección y obligación de los proveedores de servicios, no se puede garantizar el alto nivel europeo de protección de datos.

Si los datos se transfieren a los EE.UU., existe, por ejemplo, el riesgo de que las autoridades de los EE.UU. procesen estos datos con fines de control y supervisión sin que estén disponibles recursos legales efectivos o sin que se puedan hacer valer todos los derechos del interesado. Puede revocar su consentimiento en cualquier momento.

Cookies necesarias

Son aquellas que ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no podrá funcionar adecuadamente sin estas cookies. Le informamos de que puede configurar su navegador para bloquear o alertar sobre estas cookies, sin embargo, es posible que determinadas áreas de la página web no funcionen. Estas cookies no almacenan ninguna información de identificación personal.

- moove_gdpr_popup

Cookies analíticas

Son aquéllas que permiten al Editor de las mismas, el seguimiento y análisis del comportamiento de los usuarios de los sitios web a los que están vinculadas. La información recogida mediante este tipo de cookies se utiliza en la medición de la actividad de los sitios web, aplicaciones o plataformas y para la elaboración de perfiles de navegación de los usuarios de dichos sitios, aplicaciones y plataformas, con el fin de introducir mejoras en función del análisis de los datos de uso que hacen los usuarios del servicio.

Google Analytics: Registra una identificación única que se utiliza para generar datos estadísticos acerca de cómo utiliza el visitante el sitio web. La información generada por la cookie sobre su uso de este sitio web generalmente se transmite a un servidor de Google en los EE. UU. y es almacenada allí por Google LLC, 1600 Amphitheatre Parkway Mountain View, CA 94043, EE.UU.

- _dc_gtm_UA-30121999-1

- _ga_C3BSYFJ6DM

- _gat_gtag_UA_30121999_1

- _ga

- _gcl_au

- _gid