Proxy ssh

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 y Srv3) 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ía ssh 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).

José Administrator
Apasionado por el software, la electrónica y la fotografía.
follow me

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *