Acceso a máquinas usando SSH sin contraseña

De Apuntes
Saltar a: navegación, buscar

Un buen administrador de servidores utiliza contraseñas fuertes y difíciles de memorizar, sin embargo puede ser complicado estar introduciendo cada una cada vez que se necesite acceder los equipos remotos.

La forma usual para conectarse a un servidor es utilizar el protocolo SSH. Esta herramienta permite exportar la llave pública SSH de un equipo al servidor remoto para que dicho equipo, y solo ese, pueda iniciar sesión sin necesitar contraseña.

Tipos de llaves SSH y cuál utilizar

Existen muchos tipos de cifrados para las llaves de SSH como RSA, DSA, ECDSA y ED25519. La diferencia está en el algoritmo de firmado, algunos de ellos tiene ventajas sobre otros. Para datos detallados sobre los algoritmos se puede consultar el artículo de la ArchWiki.

La mejores prácticas recomiendan utilizar llaves de SSH con ED25519 dado que son más seguras y tiene mejor rendimiento que otros tipos. Este cifrado fue introducido en OpenSSH 6.5, por lo que las distros modernas deberían incluirlo. Si por alguna razón este algoritmo no está disponible se puede optar por el uso de RSA.

Las llaves RSA son las más comúnes y por tanto las más compatibles pues están presentes en todas las versiones de OpenSSH. El tamaño mínimo de la llave es de 1024 bits, con el valor por defecto de 2048 bits. Sin embargo, si se desea mayor seguridad, se recomienda utilizar el parámetro -b en el comando ssh-keygen para definir un valor distinto del defecto.

Asimismo, la vieja codificación por defecto de la contraseña para las llaves privadas de SSH es insegura (utilizando MD5). A partir de la versión 6.5 de OpenSSH se debe utilizar la opcion -o en el comando ssh-keygen para codificar la llave privada de una manera más segura.

Si ya cuenta con el par de llaves RSA para SSH, se recomienda actualizar el formato de cifrado de la contraseña con el siguiente comando sobre la llave privada:

ssh-keygen -o -f ~/.ssh/id_rsa


Primero se debe generar las llaves pública y privada

  • Las llaves se generan abriendo una terminal y ejecutando (en Ubuntu/Debian):
    • En caso de ED25529:
ssh-keygen -t ed25519
    • En caso de RSA:
ssh-keygen -o -t rsa -b 4096
  • Presione 'enter' para utilizar la ruta predeterminada.
  • Presione 'enter' dos veces para dejar una passphrase vacía.

Este procedimiento generará dos archivos en ~/.ssh/:

  • id_ed25519 o id_rsa, que es la llave privada
  • id_ed25519.pub o id_rsa.pub, que es la llave pública a exportar

Se exporta la llave pública

Una vez generadas las llaves, tanto la privada como la pública, se procede a exportar la segunda. Para ello se ejecuta:

ssh-copy-id -i ~/.ssh/id_rsa.pub <REMOTE_USER>@<HOST>

Donde:

  • <REMOTE_USER> es el nombre de usuario con que se autentica en el servidor remoto
  • <HOST> es el número de IP o el nombre de dominio del servidor remoto

Deberá digitar la contraseña para autenticarse, seguido se le mostrará una confirmación de que el proceso se ejecutó adecuadamente.

Por último se prueba la conexión

Ahora debería poder iniciar sesión SSH en el equipo remoto sin necesidad de digitar una contraseña. Para probarlo puede abrir una terminal e intentar conectarse:

 ssh <REMOTE_USER>@<HOST>

Si la conexión se realiza sin pedir una contraseña, significa que el proceso se realizó correctamente.