Esta solución atiende a un caso muy usual en la administración remota de dispositivos que se muestra en el diagrama de red que ilustra este post y que se resume en los siguientes puntos:
- Se posee un grupo de servidores (identificados en este ejemplo como
Srv1
,Srv2
ySrv3
) que no tienen salida directa a Internet. - Se posee un equipo cliente en una ubicación remota (como puede ser nuestra casa) desde el que se quiere acceder a los servidores para su administración vía una conexión ssh.
- La red de servidores posee un equipo pasarela (denominado en este ejemplo
GW
) que sí es accesible desde Internet víassh
y que también posee conectividad con los servidores a administrar.
Bajo estas condiciones, el acceso a los servidores pasaría por iniciar una sesión ssh contra el equipo GW
con un usuario que tengamos en ese servidor y, una vez obtenido un prompt en ese equipo GW
, lanzar una sesión hacia el servidor a gestionar.
Similarmente, para transferir archivos a través de scp, deberíamos primeramente lanzar una transferencia hacia el equipo GW
y, desde allí, lanzar una segunda transferencia hacia el equipo destino de la copia.
Todo esto puede simplificarse si, editando el fichero .ssh/config
de nuestro equipo cliente incluimos la siguiente configuración:
Host Srv1 ProxyCommand ssh -q usergw@gw.example.com nc -q0 dir_srv1 22 Host Srv2 ProxyCommand ssh -q usergw@gw.example.com nc -q0 dir_srv2 22 Host Srv3 ProxyCommand ssh -q usergw@gw.example.com nc -q0 dir_srv3 22
Donde deberíamos reemplazar usergw
por el nombre del usuario del que tengamos credenciales en el servidor GW
, gw.example.com
por el nombre DNS con el cual podemos acceder al servidor GW
desde internet y dir_srvN
por la dirección IP del servidor a acceder.
Una vez efectuada esta configuración, al lanzar desde nuestro equipo cliente el comando:
$ ssh usr1@Srv1
se nos pedirá primero la clave del usuario usergw
dentro del servidor GW
para seguidamente requerir la clave del usuario usr1
dentro del servidor Srv1
y otorgarnos directamente el prompt en el servidor Srv1
evitando el doble login.
De igual forma, si lanzásemos desde nuestro cliente el comando:
$ scp usr2@Srv2:/var/log/messages /tmp
se solicitarán las claves del usuario usergw
dentro del servidor GW
y del usuario usr2
dentro del servidor Srv2
para traer al directorio temporal de nuestro portátil el fichero /var/log/messages
del servidor, sin necesidad de realizar una transferencia intermedia en el servidor GW
(y sin siquiera consumir espacio de disco en el equipo intermedio).