El mismo agente SSH puede servir los retos producidos por conexiones SSH indirectas, es decir conexiones SSH arrancadas desde una conexión SSH. La idea general es que el reto producido por el servidor SSH será redirigido via los servidores intermedios hasta el agente en la máquina local. El reto será resuelto por este último y la solución emprenderá el camino de vuelta hasta el último servidor en la lista de saltos.
Para habilitar Agent forwarding
usamos la opción -A
.
desktop$ ssh -A user@remotehost
Si se quiere habilitar agent-forwarding desde el fichero de configuración
pondremos ForwardAgent yes
en la correspondiente
entrada para ese host en ~/.ssh/config
:
$ cat ~/.ssh/config Host shellserver ForwardAgent yes Host management-server ForwardAgent yes Host * ForwardAgent no
Obsérvese la presencia de la sección restrictiva Host *
en el fichero de configuración.
Veamos un ejemplo:
ssh
conecta con el servidor SSH remoto, se produce la autentificación via el agente
que previamente ha sido cargado con la identidad. Se le solicita al servidor agent-forwarding.
lusasoft@LusaSoft:~$ ssh -A orion Linux orion 2.6.8-2-686 #1 Tue Aug 16 13:22:48 UTC 2005 i686 GNU/LinuxEl servidor crea un socket en
/tmp/ssh-XXXXXXX/agent.#####
y
inicializa la variable SSH_AUTH_SOCK
.
El daemon SSH abre nuestra shell y comenzamos a trabajar en el servidor.
Last login: Fri May 1 10:21:38 2009 from 85.155.13.48.dyn.user.ono.com casiano@orion:~$ env | grep -i SSH SSH_CLIENT=85.155.13.48 35107 22 SSH_TTY=/dev/pts/3 SSH_AUTH_SOCK=/tmp/ssh-ngwpX26103/agent.26103 SSH_CONNECTION=85.155.13.48 35107 193.145.105.17 22 casiano@orion:~$ ls -lR /tmp/ssh-ngwpX26103/agent.26103 srwxr-xr-x 1 casiano casiano 0 2009-05-01 10:53 /tmp/ssh-ngwpX26103/agent.26103En la máquina en la que estamos no existen ningunas identidades operativas:
casiano@orion:~$ ls -ltra .ssh total 60 -rw-rw-r-- 1 casiano casiano 505 2009-03-30 08:53 config -rw-r--r-- 1 casiano casiano 4960 2009-04-04 11:43 known_hosts -rw------- 1 casiano casiano 6466 2009-04-04 11:43 authorized_keys drwx------ 2 casiano casiano 4096 2009-05-01 10:19 . drwxr-x--x 50 casiano casiano 12288 2009-05-01 11:13 ..
ssh
a otra máquina europa
. El cliente
ssh
observa la presencia de la variable
SSH_AUTH_SOCK
y se conecta al socket. El cliente le indica
al servidor que quiere usar la misma clave que se ha usado
para esta conexión.
casiano@orion:~$ ssh europa Linux europa 2.6.24-23-generic #1 SMP Wed Apr 1 21:43:24 UTC 2009 x86_64 casiano@europa:~$Vemos que hemos entrado sin necesidad de introducir una clave por teclado. La clave pública de la identidad que reside en la máquina inicial ha sido instalada también en
europa
. ¿Que ha ocurrido?
El servidor en europa
prepara el reto y se lo envía al cliente.
El cliente en orion
recibe el reto y se lo pasa a su servidor el cual actúa
- desde el punto de vista del cliente - como si fuera un agente.
El servidro sshd
en orion
mueve el reto al cliente de la primera conexión.
Este primer cliente se lo pasa al agente inicial que es quien conoce
la clave privada. La solución es preparada por el agente.
Ahora la solución recorre el camino de vuelta.