Una de las medidas de seguridad recomendadas para proteger nuestros servidores es el uso de llaves SSH para autenticar usuarios.

Esto significa que tus usuarios ya no tendrán que ingresar usuario y contraseña, si no que mediante una llave instalada en su máquina propia, podrán acceder al servidor remoto.

Este esquema es una recomendación de seguridad para administradores de sistemas. Su uso se extiende también a usuarios de Git, ya que al soportar sincronización mediante SSH, también permite implementar autenticación mediante llaves.

Como funciona la autenticación por llaves

El esquema es sencillo: Utilizando la herramienta ssh-keygen que viene en la mayoría de los sistemas, generamos el siguiente par de llaves:

  • Llave pública
  • Llave privada

Estas llaves son básicamente archivos que contienen una secuencia extensa de caracteres y que están relacionadas entre sí, cada una funciona solo con su par.

Como bien dice su nombre, una llave es pública, es decir, podemos distribuirla libremente. Y la otra es privada, tenemos que guardarla solo para nosotros, y con esto hay que ser muy cuidadoso, si no estaremos comprometiendo el acceso a nuestro servidor remoto.

Entonces, la llave pública la instalaremos en nuestro servidor remoto, y la llave privada la mantendremos en nuestro PC. De esta forma, cuando hagamos SSH al servidor remoto, SSH automáticamente verificará contra el servidor remoto si existen llaves compatibles y permitirá el ingreso omitiendo el paso de ingresar contraseña.

Crear el par de llaves SSH

En nuestra propia máquina vamos a ejecutar el comando ssh-keygen, el cual nos pedirá algunos parámetros pero para este caso los dejaremos en blanco:

Para propósitos de prueba, hemos dejado los campos passphrase en blanco, pero para incrementar aún más la seguridad, puedes completarlos con una contraseña segura.

En el último paso validamos las claves creadas en el directorio .ssh de nuestro home:

  • id_rsa como llave privada
  • id_rsa.pub como llave público

Subir llave pública al servidor remoto

Entonces, ya tenemos nuestras llaves pública y privada. Ahora procederemos a subir la pública al servidor remoto usando el comando ssh-copy-id e indicándole el usuario y servidor remotos:

Ingresar utilizando llaves instaladas

Ahora que ya tenemos el par instalado en cada máquina, vamos a ingresar utilizando el ya conocido ssh:

Y como vimos, ahora cada vez que entremos a nuestro servidor remoto, no tendremos que ingresar la contraseña del usuario.

Conclusión

La autenticación por llaves nos da la libertad de deshabilitar la autenticación por usuario/contraseña. Esto significa mayor seguridad ya que un vector de ataque común como el de fuerza bruta ya no estará disponible para los atacantes.

Por otro lado, nos ahorraremos el manejo de contraseñas complejas o difíciles de recordar cada vez que ingresemos a la máquina.

Por último, recalcar que la clave privada debe mantenerse lo más segura posible, no se debe compartir bajo ninguna circunstancia.