SSH keygen: Guía completa para principiantes

SSH (Secure Shell) es una herramienta esencial para acceder de manera segura a servidores remotos. El método de autenticación basado en claves SSH proporciona una seguridad mucho más robusta que el uso de contraseñas, lo que lo convierte en un conocimiento fundamental para todos los desarrolladores. En este artículo, explicaré de manera sencilla y detallada los conceptos básicos de la generación de claves SSH hasta su uso práctico, adaptándome al nivel de los principiantes.


¿Por qué necesitamos SSH keygen?

El método tradicional de contraseñas presenta el riesgo de ser expuesto durante el proceso de ingreso y es vulnerable a ataques de fuerza bruta. Las claves SSH utilizan un par de claves: la clave pública (Public Key) y la clave privada (Private Key) para resolver este problema.

  • Clave privada (Private Key): Se guarda de manera segura en el ordenador del usuario y nunca debe ser expuesta. Solo se puede acceder al servidor con esta clave.
  • Clave pública (Public Key): Es la clave que se registra en el servidor al que se desea acceder. Su divulgación no supone un problema de seguridad.

Cuando se accede a SSH, el servidor utiliza la clave pública del usuario para cifrar la solicitud de autenticación, y si la clave privada del ordenador del usuario puede descifrarla correctamente, se permite el acceso. De esta forma, se puede comunicar de manera segura sin necesidad de intercambiar contraseñas.

Escena donde el hada SSH entrega la clave pública


Método de creación de claves SSH: comando ssh-keygen

El comando más básico para generar claves SSH es ssh-keygen. Abre la terminal e introduce el siguiente comando.

ssh-keygen

Al ejecutar el comando, se te harán algunas preguntas. ¿Vamos a revisarlas una por una?

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

    • Esta pregunta trata sobre la ruta donde se guardará el archivo de la clave generada. A menos que tengas una razón específica, se recomienda utilizar la ruta predeterminada .ssh/id_rsa. Solo presiona Enter.

  2. Enter passphrase (empty for no passphrase):

    • Esta pregunta te pregunta si deseas establecer una contraseña para la clave privada. Se recomienda encarecidamente establecer una para mejorar la seguridad. Si estableces una contraseña, incluso si la clave privada se ve comprometida, no se podrá usar sin dicha contraseña, lo que añade una doble seguridad. Ten en cuenta que no se mostrará nada en la terminal mientras escribes la contraseña, así que asegúrate de escribirla correctamente y luego presiona Enter.

  3. Enter same passphrase again:

    • Vas a introducir nuevamente la contraseña que ingresaste antes para confirmarla.
    • Resultado esperado:

Your identification has been saved in /home/youruser/.ssh/id_rsa
Your public key has been saved in /home/youruser/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx youruser@yourmachine
The key's randomart image is:
+---[RSA 3072]----+
|        .=*o.    |
|       . +.E+    |
|      . o.=. .   |
|       o  . o    |
|      . S  .     |
|       . .       |
|        .        |
|                 |
|                 |
+----[SHA256]-----+

Una vez finalizada la generación de claves, se crean dos archivos en el directorio ~/.ssh/.

  • id_rsa: Clave privada (Private Key)
  • id_rsa.pub: Clave pública (Public Key)

RSA vs. Ed25519: ¿Qué método elegir?

Al crear claves SSH, puedes especificar el método de cifrado de la clave utilizando la opción -t en el comando ssh-keygen. Los métodos más comúnmente utilizados son RSA y Ed25519.

1. Método RSA (-t rsa)

  • Es un método que se ha utilizado ampliamente desde los inicios de SSH.
  • Su estabilidad está comprobada y es compatible con la mayoría de los sistemas.
  • Puedes especificar la longitud de la clave, y generalmente se recomienda utilizar 4096 bits.
    • Ejemplo: ssh-keygen -t rsa -b 4096

2. Método Ed25519 (-t ed25519)

  • Es un método de cifrado más reciente, basado en la criptografía de curvas elípticas Curve25519.
  • Ofrece el mismo o mejor nivel de seguridad con una longitud de clave más corta en comparación con RSA.
  • La velocidad de generación de claves y autenticación es rápida y utiliza menos recursos.
  • La mayoría de los sistemas modernos lo soportan, pero podría no ser compatible con sistemas muy antiguos.
    • Ejemplo: ssh-keygen -t ed25519

Método recomendado y razones

En la actualidad, si no hay problemas de compatibilidad específicos, recomiendo encarecidamente usar el método Ed25519.

  • Mejor seguridad: Proporciona una seguridad sólida con una longitud de clave más corta, lo que lo hace más resistente a ataques de fuerza bruta, entre otros.
  • Mejor rendimiento: El proceso de generación y autenticación de claves es más eficiente.
  • Simplicidad: Puedes generarlo fácilmente sin preocuparte por la longitud de la clave como con RSA.

Ejemplo de generación de clave Ed25519

ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_my_server -C "my_server_ssh_key"
  • -t ed25519: Genera la clave usando el método Ed25519.
  • -f ~/.ssh/id_ed25519_my_server: Asigna el nombre id_ed25519_my_server al archivo de la clave. (Puedes nombrarlo de manera diferente para distinguirlo del id_rsa anterior.)
  • -C "my_server_ssh_key": Añade un comentario a la clave. Es recomendable nombrar la clave para que puedas identificar fácilmente su propósito.

Resultado esperado:

Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):  # Introduce contraseña (recomendado)
Enter same passphrase again:                # Re-confirmar contraseña
Your identification has been saved in /home/youruser/.ssh/id_ed25519_my_server
Your public key has been saved in /home/youruser/.ssh/id_ed25519_my_server.pub
The key fingerprint is:
SHA256:yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy my_server_ssh_key
The key's randomart image is:
+--[ED25519 256]--+
|      .+=+       |
|     . oE B      |
|      o + O      |
|     . + +       |
|    o . S        |
|   . = .         |
|  . B +          |
| . * = o         |
|+ o . = .        |
+----[SHA256]-----+

Ahora deberías tener una comprensión básica de cómo crear y gestionar claves SSH. Al registrar la clave pública generada (id_ed25519_my_server.pub o id_rsa.pub) en el archivo ~/.ssh/authorized_keys de un servidor remoto, puedes acceder de manera segura sin necesidad de contraseña. En el próximo artículo, profundizaremos en cómo registrar y usar la clave SSH generada en el servidor.

Si tienes alguna pregunta, no dudes en dejarla en los comentarios.