Preámbulo

Yendo un poco al grano, en lugar de explicar con detalle las características del par de claves, vamos a ver cómo se generan y se hace uso de ellas. Las conexiones se harán desde un equipo Windows 10 a un servidor Debian 11, y algún que otro matiz.

Lo que está claro y se sabe es que el uso de claves SSH es más seguro que el uso de contraseñas.

Claves SSH

Como se hace una conexión desde un equipo Windows a un servidor Linux, está de la forma que se puede hacer mediante PuTTY o OpenSSH. En ambos casos, se debe tener acceso al servidor, sea por contraseña o por claves, para poder importar la clave pública.

Es importante conocer las diferencias entre clave pública y clave privada y el uso del fichero authorized_keys.

Clave pública: es la clave que se guarda en el servidor y se comparte con el resto de los clientes que se quiera hacer uso del servidor.

Clave privada: es la clave que se guarda en el equipo cliente y que se utiliza para conectarse al servidor. Debe guardarse en un sitio seguro.

autorized_keys: es el fichero que se encuentra en el directorio .ssh del servidor y que contiene las claves públicas de los clientes que se quieran conectar al servidor.

Algoritmmo de cifrado: es el algoritmo que se utiliza para cifrar la comunicación entre el cliente y el servidor. Se hará uso del algoritmo EdDSA.

Generando claves SSH mediante PuTTYgen

En la herramienta PuTTYgen, se debe seleccionar el algoritmo EdDSA, y le damos al botón Generate. Una vez generada la clave, se muestra lo siguiente:

PuTTY Key Generator

El texto que está seleccionado es la clave pública, se puede establecer una contraseña para la clave privada, eso es opcional, y la clave privada se obtiene pulsando el botón Save private key. Se recomienda guardarlo en un sitio seguro y no compartirlo con nadie.

Para guardar la clave pública en el servidor, ir a la sección de guardar la clave pública.

Ahora falta la clave privada, para ello, con la clave privada que se guardó antes, abrimos PuTTY, seleccionamos la sesión guardada o se crea una.

PuTTY selección de sesión

Pues en el panel derecho, nos vamos hacia la siguiente ruta: Connection/SHH/Auth/Credentials, y en el panel derecho, buscamos la clave privada

Buscando la clave privada

Recuerda guardar la sesión antes de dar al botón Open, si no, tendrás que volver a buscar la clave privada.

Abrimos la conexión, introducimos el nombre de usuario, y et-voilà.

Conexión PuTTY

Mediante OpenSSH

El procedimiento es similar al uso de PuTTY, pero en este caso la generación de clave se hará por consola de Windows.

En la propia terminal:

Si se generó una clave anteriormente y se hace uso de ella, generar una nueva podría ocasionar la pérdida de acceso al servidor. Tenga precaución.

$ ssh-keygen -t ed25519 -C "correo@mail.com"

La bandera -C significa comentario, normalmente se pone un correo electrónico asociada a la persona que hace uso de la clave privada.

Una vez generada las claves, se guardan en el directorio .ssh en la carpeta del usuario. Al ser ed25519, los ficheros se llaman id_ed25519, que es la clave privada e id_ed25519.pub que es la clave pública.

Se recomienda cambiarles de nombre para evitar el reemplazo de estas claves al generar otras nuevas.

El contenido del fichero id_ed25519.pub debe ser copiado al fichero de authorized_keys.

Para guardar la clave pública en el servidor, ir a la sección de guardar la clave pública.

Mientas que la clave privada se deja donde está, y se procede a editar el fichero config, que se encuentra ubicado en la carpeta .ssh de la carpeta del usuario. En caso de que no exista dicho fichero, crear uno con el mismo nombre y sin extensión.

Host 192.168.1.57
  HostName 192.168.1.57
  User root
  IdentityFile C:\Users\model\.ssh\vm-debian

En el fichero config se debe añadir lo siguiente para hacer uso de la clave privada, donde Host y HostName es la dirección IP del servidor, User es el usuario con el que desea entrar e IdentityFile es el fichero donde está la clave privada.

Guardando la clave pública en el servidor

La clave pública se debe guardarse en el servidor, para ello nos conectamos al servidor y localizamos el archivo authorized_keys dentro del directorio .ssh.

$ cd ~/.ssh
$ touch authorized_keys

Si no existe el directorio .ssh, se puede crear.

$ cd ~
$ mkdir ~/.ssh && cd .ssh
$ touch authorized_keys

Una vez creado el fichero, se añade la clave pública que hemos generado anteriormente al fichero authorized_keys.

$ echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO0EV2+vc2DQABB9T5loDEfqbdsv9DKdGgmBn5YiPqQQ eddsa-key-20230225" >> authorized_keys

Es importante reseñar que el proceso de añadir la clave pública en el fichero authorized_keys se está haciendo sobre el directorio de usaurio root. Si en lugar de iniciar sesión con root, lo prefiere con un usuario estándar se deberá hacer el mismo procedimiento pero en el propio directorio del usuario.

Eliminar el acceso por contraseña

Una vez que ya se pueda iniciar sesión mediante claves SSH, se puede quitar la posibilidad de acceso por contraseña. Para ello basta con editar el fichero sshd_config.

$ nano /etc/ssh/sshd_config

Buscar la línea que pone: PasswordAuthentication, no debe estar comentada y cambiar su valor a no. Guardar y reiniciar con: service sshd restart.

Bonus: Conexión por WinSCP mediante claves SSH

Con la clave privada que se generó en PuTTY, añadir en ajustes avanzados en la parte de nueva conexión.

Conexión WinSCP

Eso es todo.

Datos técnicos

  • Windows: Microsoft Windows [Versión 10.0.19044.2604]
  • Debian: Debian GNU/Linux 11.5.0 (bullseye)
  • PuTTY: Release 0.78
  • OpenSSH en Windows: OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
  • OpenSSH en Debian: OpenSSH_8.4p1 Debian-5+deb11u1, OpenSSL 1.1.1n 15 Mar 2022