Buscar en este blog

12.6.07

"Fidelización" ssh

Cuatro simples pasos de los que siempre me olvido y que permiten hacer login remoto vía "ssh" sin necesidad de contraseña.

Este procedimiento está muy documentado en Internet, pero como siempre se me olvida me haré aquí la receta.

Aunque la mayoría de las veces esto se utiliza para hacer conexiones remotas via ssh con otros equipos sin que nos pida la contraseña, el principal uso que le doy es para la "administración desatendida".
A la hora de hacer tareas de mantenimiento sobre un sistema, normalmente se usan los planificadores de tareas (sobre todo "cron" en máquinas Unix) que básicamente envían comandos sobre los sistemas. La mayoría de estos comandos requiren privilegios de administrador para poder ejecutarse y por añadido esto suele requerir la contraseña de ese administrador.

Para ejecutar tareas en sistemas remotos se suelen hacer conexiones mediante ssh, pero la cosas se complica cuando esta conexión la debe ejecutar el sistema y no hay nadie delante para introducir la contraseña cuando la necesite. Para solucionar este problema utilizando ssh se utiliza la "Fidelización de Clientes".
Básicamente esto consiste en que al intentar conectarse a un sistema, este reconozca inequívocamente al sistema cliente y le permita la conexión sin necesidad de identificarse totalmente (no pidiendo la contraseña). Para esto basta con utilizar pares de claves. Un equipo quedará identificado por un par de claves (una pública y otra privada). La pública será instalada en el servidor al cual se quiere conectar indicándo de alguna manera que esta es una clave genuina que identifica a su dueño.

¿Como se hace todo esto en Linux?:

  • Crear el par de claves en el sistema cliente:
ssh-keygen -t rsa

Primero nos pedirá la ruta para guardar el par de claves (/user/.ssh)
Después pedirá una contraseña que dejaremos en blanco.

  • Copiar la clave pública
Las claves estarán almacenadas en el directorio que hemos indicado con los nombres:
id_rsa <- Clave privada id_rsa.pub <- Clave pública ...hemos de copiar la clave pública al servidor; podemos usar el comando "scp" para ello, de la forma: scp ./.ssh/id_rsa.pub root@IP_SERVIDOR:/root

(ahora nos pedirá la contraseña de root, pero puede que sea la última vez...)


  • "Fidelizar" la clave en el servidor.
Básicamente consiste en añadir el contenido del archivo "id_rsa.pub" que hemos copiado al servidor al archivo "/root/.ssh/authorized_keys" con una orden como esta:

cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

  • LISTO.
Borramos el archivo "id_rsa.pub" del servidor por seguridad y probamos a hacer conexión "ssh" con login de "root" desde el otro sitema. No debería pedirnos la contraseña para ese usuario.
Esto puede hacerse con todos los usuarios; simplemente hay que crear las claves con el usuario que deseemos y colocarlas en el "authorized_keys" del usuario correcto en el servidor en que queremos hacer login sin clave.



* Un par de enlaces para conocer el funcionamiento de "ssh" y el cifrado de clave pública (que es el que se utiliza aquí):