Creación de llaves ssh (ED25519)

Cómo crear un par de llaves ssh

**Actualización 10/08/2020**

Se edita esta entradapara actualizar el tipo de cifrado y los comandos necesarios para usar el nuevo cifrado recomenadado, se deja algunos links para mas información por que el cambio de tipo de cifrado, pero el resumen es que los nuevos cifrados de curva eliptica, son mas rapidos e igual o mas eficientes que los clasicos RSA, gracias.

Practical Cryptography With Go

Publication 800-57 Part 3 (PDF)

*******

 

Secure Shell o SSH es un protocolo que nos permite conectarnos de manera segura, cifrando el canal de comunicación, hacia un servidor remoto, normalmente a la consola de un servidor tipo unix.

Para conectarnos necesitamos un cliente de ssh y que el destino tenga habilitado el servidor ssh.
El uso normal es ejecutando desde una consola:

$ ssh -p 22 usuario@direccion.servidor.destino

El puerto (opción -p) a usar no es necesario definir si se usa el default, que es el 22.

Otra manera de conectar omitiendo la solicitud de contraseña es empleando un juego de llaves.
La comunicación se basa en ofrecer un intercambio de llaves en vez de escribir manualmente la contraseña.
Este par son una llave pública (que compartí previamente con el servidor o servidores, puedo usar la misma en varios pero no es recomendable y esta llave se debe “autorizar” del lado del servidor) y en mi equipo una llave privada que nadie más debe tener.

Para generar las llaves ejecutamos desde una consola el comando:

$ ssh-keygen -t ed25519 -C "Comentario" -f ~/.ssh/NombreLlave

Donde

  • ssh-keygen Es el comando que se encargara de generar el juego de llaves y es parte de las utilerías de ssh. (Si no lo tienes instalado, para los sistemas basados en Debian ”# apt-get install openssh-client”)
  • -t ed25519 Con este parámetro indicamos que use un tipo de cifrado ”ED25519”.
  • -C “Comentario” Este parámetro es opcional pero recomendado, lo usamos para poner una leyenda por ejemplo “USUARIO en cempazuchitl” y saber a que estamos enlazando.
  • -f nombre Con este parámetro indicamos donde se guardara y que nombre tendrán el par de claves

Al ejecutarlo mandara primero el mensaje

Generating public/private rsa key pair.

Con esto nos avisa que esta trabajando con los parámetros indicados.

Seguido nos pregunta

Enter passphrase (empty for no passphrase):''

Esta opción añade otra capa de seguridad, al bloquear el archivo(la llave privada) con una contraseña, esta solo se desbloquea una vez durante la sesión dependiendo de la configuración de tu computadora.
Recuerda los buenos hábitos para generación de passwords.
Pero si lo deseas, puedes solo dar Enter y no pedirá contraseña cada vez que uses el par de llavez.

$ ssh-keygen -t ed25519 -C "USUARIO cempazuchitl" -f ~/.ssh/USUARIOCempazuchitl
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ~/.ssh/USUARIOCempazuchitl.
Your public key has been saved in ~/.ssh/USUARIOCempazuchitl.pub.
The key fingerprint is:
SHA256:5LiLVp8+85o6tmtNMfhS5QPLPtC1BlFydQxmvyEmQjQ USUARIO cempazuchitl
The key's randomart image is:
+--[ED25519 256]--+
|       .Eoo.=o.  |
|       .o+oo o.  |
|       +oB..o o  |
|      o+B.=o . o |
|      .=S+ .  .  |
|      o.=        |
|     ..= o       |
|    ..+.*.       |
|   ..o=*+=.      |
+----[SHA256]-----+

Dependiendo de la capacidad de tu equipo puede tardar varios segundos
pero al final nos indicará que las llaves fueron creadas en la ubicación indicada.

Se crean dos archivos, uno con el nombre indicado y otro con el nombre y extensión .pub.
Ahora, puedes compartir la llave pública al servidor remoto:

Haciendo un “cat” para ver el contenido del archivo(con extensión .pub, nunca, la clave secreta), este contenido es el que se debe agregar al archivo authorized_keys del lado del servidor.

Imagen usada en el articulo “Camping Labor Day Weekend” por spysknee bajo licencia de CC BY-SA 2.0