Nunca es tarde para mejorar la seguridad de nuestros servidores, sin ir más lejos en ocasiones cuando administramos una granja de servers a ciertos administradores nos obliga a mantener un listado interminable de usuarios y contraseñas en un archivo digital, que a lo mucho lo protegemos con alguna clave básica, o en mi caso me lleva a imprimir el listado y protegerlo fuertemente debajo del teclado 😉
Pues bien el protocolo SSH permite autentificación sin contraseña, en anteriores ocasiones ya comentamos como mejorar la seguridad de nuestros servidores vía SSH, pero en realidad si deseamos una conexión transparente para ello es necesario crear un par de claves (publica/privada).
Las pruebas se definieron en un servidor Linux con OpenSSH y una estación de trabajo con Ubuntu. Obviamente no usaría Windows como estación de trabajo, pero también es posible implementar las llaves del lado de un cliente Windows.
Inicialmente validamos si contamos con las llaves del lado de nuestra estación de trabajo:
ls -la ~/.ssh
De existir claves, lo común es un par de archivos con este nombre id_dsa o id_rsa (.pub), los archivos terminados en (.pub) son las llaves publicas y el otro archivo es la clave privada.
De no existir los archivos podemos crearlos utilizando ssh-keygen, que es un generador de claves de autentificación, que nos permite utilizar diferentes tipos de certificados (RSA, algoritmo simétrico por bloques – DSA, algoritmo de cifrado digital). No entraremos en detalle, lo fundamental son las opciones de -p cambio de contraseña y -t el tipo de cifrado.
Así que ahora, en el caso de no contar con la clave, vamos a generarla.
ssh-keygen -t rsa
Verificamos que se han generado los archivos.
~/.ssh$ ls -la
En el caso de generar claves con algoritmo RSA, en necesario comprobar que nuestro servidor tenga activada la versión 2 del protocolo SSH, activada la validación de RSA y la autentificación por claves publicas.
Todo ello en el archivo /etc/ssh/sshd_config que también nos muestra la ruta en donde están definidas las claves públicas
Adicionalmente, verificar que se tenga el archivo authorized_keys en la ruta del perfil del usuario /home/user/.ssh/ del lado del servidor.
De no tener el archivo, lo podemos crear con un:
~/.ssh$ touch authorized_keys
Ahora es necesario copiar la clave publica generada del lado del cliente. ¿Como podemos hacerlo?. En mi caso utilice mis credenciales de usuario, en el servidor para conectarme y poder copiar las llaves.
Y para el final solo queda probar, realizando una conexión con nuestro servidor via SSH. No si antes pasarte por el post anterior de aseguramiento de SSH para aplicar algunas mejoras.
Es importante mantener contraseña en nuestro PC donde se encuentran alojadas las llaves. Pero si deseamos, también podemos agregarle clave a las llaves.
Imagen | Daniel Lee (CC BY-ND 2.0)
Un interesante tutorial para empezar el año 🙂
Gracias por esta nueva colaboración @anger
Excelente artículo…… Como aporte, en el comando de las copias de las llaves para saltarte algunos pasos simplemente puedes copiar la llave generada del lado del cliente con el comando «ssh-copy-id -i /home/user/.ssh/id_rsa.pub usuario@ip» Esto creará las carpetas y archivos necesario en caso de no tenerlas del lado del server … Otro datos es que la llave que se copia al server es la pública .pub ….. Un Saludo
Gracias Jason, por la acotacion del comando (+1 por tu idea), se va corregir la imagen de la copia del archivo (.pub) que se copia al server.
🙂
buen apunte amigo, empezando con seguridad