Skip to content

Configurar claves para SSH en Linux

Configurar claves para SSH en Linux

Secure Shell -también conocido como SSH o intérprete de órdenes seguro- es un protocolo criptográfico de red que permite a los usuarios conectarse y realizar acciones en equipos remotos, de una forma segura, a través de una red insegura, garantizando la confidencialidad e integridad de las comunicaciones.

SSH con contraseña vs claves SSH

Uso de contraseña

Para conectarnos a un servidor usando el protocolo de Shell Segura tenemos dos opciones. La primera consiste en especificar un usuario y contraseña seguido del nombre o IP del host remoto:

ssh usuario@servidor

En este caso se nos pedirá la contraseña del usuario cada vez que establezcamos una conexión con él. Esto tiene dos desventajas fundamentales. La primera es que siempre tendremos que escribir (y por tanto recordar) la contraseña.

Iniciar sesión SSH con contraseña

La segunda, más relevante, es que nos obliga a enviar la contraseña del usuario a través de un medio que podría no ser seguro. Además, dicha contraseña podría ser adivinada mediante un ataque de fuerza bruta.

Uso de claves criptográficas

La segunda opción es la de utilizar las denominadas claves SSH, que nos permiten una forma mucho más segura de inicio de sesión remota. Las claves criptográficas son practicamente imposibles de descifrar mediante ataques de fuerza bruta.

Si generamos un conjunto de claves SSH (pública y privada) podemos colocar la clave pública en cualquier servidor e iniciar sesión en él directamente desde cualquier cliente que ya tenga la clave privada en su poder.

Cuando se produce el intercambio de comunicación entre ambos equipos -el servidor al que nos conectamos con su clave pública y el cliente con su clave privada- el sistema se desbloquea sin necesidad de contraseña y tampoco de usuario. La clave privada será la que nos autentique en el servidor remoto. Mejor aún, porque también podemos proteger la clave criptográfica con una clave, para conseguir una robusta seguridad en SSH.

RelacionadoAuditar conexiones SSH con SSHAudit

Generar claves SSH en Linux

El proceso para generar el conjunto de claves pública / privada en Linux es similar en la mayoría de distribuciones. Primero, deberemos saber que las claves públicas y privadas se almacenan normalmente en el directorio:

/home/<usuario>/.ssh

Dentro de este directorio oculto podremos ver claves que, en caso de existir, tendrán el nombre de id_rsa (privada) e id_rsa.pub para la clave pública.

Par de claves SSH

Como su nombre indica, la clave privada es «privada» y por tanto deberá permanecer almacenada de forma segura. La clave pública será la que podremos compartir libremente con cualquier host.

Vamos a generar nuestra clave SSH de la siguiente forma:

ssh-keygen

Se nos pedirá confirmar un nombre (usaremos el predefinido en este caso) y se nos preguntará si queremos establecer una passphrase o contraseña.

ssh-keygen

Cuando terminemos ya tendremos nuestro par de claves Secure Shell generado, se usará por defecto el algoritmo RSA con longitud 2048, al menos en el sistema Fedora que estoy utilizando, pero también podemos especificar el tipo de clave usando este formato:

ssh-keygen -t <tipo>

Las claves generadas tendrán el siguiente aspecto:

  • Clave privada SSH
  • Generar claves SSH en Linux

Instalar la clave SSH pública en en servidor

Ahora es momento de pasar nuestra clave pública al host remoto con el siguiente comando:

ssh-copy-id <usuario@servidor>

O bien:

ssh-copy-id <servidor>
ssh-copy-id

El comando anterior nos muestra la ruta origen desde donde se instalará la clave pública. Obviamente, deberemos confirmar con la contraseña que somos quien decimos ser.

Inicio de sesión SSH

La salida del comando nos informa del copiado de nuestra clave, además de sugerirnos iniciar sesión ahora de la siguiente forma:

ssh usuario@servidor

En el caso de que hayamos generado una clave privada con contraseña, se nos pedirá como en la siguiente imagen:

ssh inicio de sesion con contraseña

En caso de haber generado una clave sin establecer contraseña, el inicio de sesión será inmediato:

ssh inicio de sesion sin contraseña

Aprende másComo configurar FTPS y SFTP en Ubuntu

Conclusiones

Hemos visto los pasos y lo sencillo que es generar una pareja de claves para acceder por SSH de forma sencilla y segura. Ahora bien, ten en cuenta que a pesar de la comodidad que supone no usar una contraseña para la clave privada, en el caso de que esta caiga eventualmente en manos ajenas, no contarás con ese mecanismo de seguridad que podría darte un tiempo precioso.

deweloper View All

Trabajo como consultor de ciberseguridad y me gusta lo que hago. Aficionado a la informática / tecnología en general, me gusta compartir con la gente lo poco que sé. También soy aficionado al deporte y los videojuegos.

2 thoughts on “Configurar claves para SSH en Linux Leave a comment

  1. Hola, muy bueno el post. Solo agregar que cuando escribis «nos obliga a enviar la contraseña del usuario a través de un medio que podría no ser seguro» no es cierto ya que el intercambio de claves se reliaza mediante un canal seguro utilizando el protocolo diffie-hellman.. saludos..!

    • Hola Andrés, me alegro de que te haya gustado. Sobre lo que dices no te falta razón: hay un mecanismo de cifrado (en este caso DH) encargado de garantizar la confidencialidad e integridad. En tal afirmacion introduje el matiz «podría» refiriéndome a que en el futuro podría darse alguna vulnerabilidad en dicho estandar. Utilizando el par de claves se mitigaría el problema, aunque por supuesto el uso de claves entraña otros retos como la necesidad de rotación de claves para evitar ataques. Pero más preocupante que lo anterior es la tendencia que existe desde hace años a atacar mediante fuerza bruta las credenciales de shell segura, como explican muy bien en este artículo de Sucuri: https://blog.sucuri.net/2013/07/ssh-brute-force-the-10-year-old-attack-that-still-persists.html
      Saludos y gracias por venir y sobre todo por aportar tus conocimientos.

Deja un comentario