Para la autenticación mediante claves, OpenSSH ofrece un método para cachear las claves y no tener que introducir la passphrase mas que una vez. Este funcionamiento se obtiene mediante el ssh-agent.
Este agente se puede arrancar al inicio de la sesión, y el resto de conexiones con ssh utilizarán este agente para realizar la autenticación, que será entonces transparente al usuario.
Al agente se añaden las claves que se desea usar mediante el comando ssh-add, si existe passphrase está será la única vez que se solicita y se comprueba en local. Cuando se necesite usar esta clave el agente se encarga de realizar la autenticación con la otra máquina.
Vamos a ver este proceso en detalle.
Lanzamos el agente, este se queda en background pero informa de las variables de entorno que nos serán útiles.
[usuario1@localhost usuario1]$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-XXln2tGm/agent.3216; export SSH_AUTH_SOCK; SSH_AGENT_PID=3217; export SSH_AGENT_PID; echo Agent pid 3217; [usuario1@localhost usuario1]$ |
[usuario1@localhost usuario1]$ eval $(ssh-agent) Agent pid 3229 |
puedes añadir estas lineas a tu .bash_profile para que se ejecuten al inicio de la sesión. |
[usuario1@localhost usuario1]$ set |grep SSH SSH_AGENT_PID=3229 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SSH_AUTH_SOCK=/tmp/ssh-XX5cnIut/agent.3228 (1) [usuario1@localhost usuario1]$ |
Una vez tenemos el agente de autenticación en marcha, deberemos añadir las claves que deseamos usar. En nuestro caso la que hemos generado en id_dsa.
[usuario1@localhost usuario1]$ ssh-add .ssh/id_dsa Enter passphrase for .ssh/id_dsa: Identity added: .ssh/id_dsa (.ssh/id_dsa) [usuario1@localhost usuario1]$ |
El agente tiene el inconveniente de que sólo se puede usar en las sesiones en las que estén definidas las variables de entorno que hemos comentado. Si se añade el comando ssh-agent en el inicio de la sesión el efecto será que tendremos un agente por cada sesión.
Para solucionar este comportamiento puedes utilizar el script keychain que se puede obtener de http://www.gentoo.org/projects/keychain/. Este script se incluye en el inicio de la sesión y lanza el ssh-agent una sola vez en el sistema.