Un agente SSH es un programa que guarda de forma segura las frases-clave asociadas con las claves privadas y responde a consultas autentificadas de los clientes SSH. El agente recuerda la passphrase de manera que el usuario no tenga que teclearla cada vez que la clave es usada.
El agente crea un socket en un subdirectorio de /tmp
en el que escucha las peticiones de conexión SSH.
Cualquiera que tenga acceso a dicho socket puede acceder al agente. Los permisos
unix para el socket son suficientemente restrictivos.
Los programas que se usan son ssh-agent y ssh-add .
Utilizamos ssh-add
para añadir claves privadas a la cache del agente
ssh. A partir de ese momento el cliente ssh no nos importunará
solicitando la passphrase, comúnicandose con el agente
para superar el proceso de autentificación.
El agente ssh-agent
actúa como un daemon que permanece dando el
servicio de autentificación a los clientes SSH.
El programa
ssh-add
permite añadir, listar y suprimir claves de la cache del agente:
someone@localhost:~/.ssh$ ssh-add ~/.ssh/conpass Enter passphrase for /home/someone/.ssh/conpass: ********** Identity added: /home/someone/.ssh/conpass (/home/someone/.ssh/conpass) someone@localhost:~/.ssh$ ssh-add -l 2048 da:13:....:ee /home/someone/.ssh/conpass (RSA)Una vez establecida la clave en el agente es posible conectarse sin necesidad de proporcionar la frase clave:
someone@localhost:~/.kde/shutdown$ ssh remote.machine Linux remote.machine 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Mar 11 14:03:59 2008 from localhost.deioc.ull.es user@remote.machine:~$
Para arrancar el agente SSH se ejecuta el comando:
eval `ssh-agent`Esto se hace asi porque el resultado retornado por
ssh-agent
es una cadena conteniendo un script bash. Este guión establece las variables de
entorno necesarias para que las futuras llamadas a clientes SSH
puedan encontrar al agente. Observe el resultado de una ejecución sin eval
ni backticks:
$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-jaDVTd5583/agent.5583; export SSH_AUTH_SOCK; SSH_AGENT_PID=5584; export SSH_AGENT_PID; echo Agent pid 5584;
La variable SSH_AUTH_SOCK
contiene el camino al socket de dominio UNIX que será
utilizado por los clientes ssh
, scp
, etc. para comunicarse
con el agente.
El pid proporcionado en SSH_AGENT_PID
nos permite eliminar al agente mediante kill
.
Sin embargo una llamada a kill
no elimina
las variables de entorno establecidas.
La forma correcta de terminar el agente es usando la opción -k
de ssh-agent
:
pp2@localhost:~/Lbook$ eval `ssh-agent` Agent pid 5606 pp2@localhost:~/Lbook$ env | grep -i ssh SSH_AGENT_PID=5606 SSH_AUTH_SOCK=/tmp/ssh-ALUJyJ5605/agent.5605 CVS_RSH=/usr/bin/ssh pp2@localhost:~/Lbook$ eval `ssh-agent -k` Agent pid 5606 killed pp2@localhost:~/Lbook$ env | grep -i ssh CVS_RSH=/usr/bin/ssh pp2@localhost:~/Lbook$
authorized_keys
y
construye un reto basado en esa clave y lo envía al cliente.
Es posible cerrar el acceso al agente usando la opción -x
de ssh-add:
pp2@europa:~$ ssh-add -x Enter lock password: Again: Agent locked. pp2@europa:~$ ssh orion Enter passphrase for key '/home/pp2/.ssh/id_dsa': ******** Linux orion 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/Linux The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Apr 27 13:29:32 2009 from europa.deioc.ull.es casiano@orion:~$
Para abrir el acceso al agente usaremos la opción -X
de ssh-add:
pp2@europa:~$ ssh-add -X Enter lock password: **************** Agent unlocked. pp2@europa:~$
La opción -t lifetime
de ssh-add
puede ser utilizada para
limitar el tiempo de caducidad de las identidades en un agente. El tiempo
se expresará en segundos o bien de la forma time[qualifier]
, donde
time
es un entero positivo y qualifier
es:
nada segundos s | S segundos m | M minutos h | H horas d | D dias w | W semanas