Gestión de claves

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.

ssh-agent

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]$
       
La salida del ssh-agent pueden lanzarse en el shell para tener disponibles las variables de entorno que utilizarán las llamadas a comandos SSH. Esta operación se puede realizar en un sólo comando de esta manera:

[usuario1@localhost usuario1]$ eval $(ssh-agent)
Agent pid 3229
       

Sugerencia

puedes añadir estas lineas a tu .bash_profile para que se ejecuten al inicio de la sesión.

Lo comprobamos:

[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]$
        
(1)
Path del socket unix que se utiliza para dialogar con el agente.

ssh-add

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]$
       
Si la clave tiene passphrase se solicita en este momento, y se utilizará para todas las sesiones que se abran a partir de este momento sin necesidad de volver a introducirla.

keychain

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.