Muchas veces nos encontramos con el problema de tener que acceder por ssh a una máquina que se encuentra en una red privada, detrás otra máquina con una dirección pública.
Es requisito para poder realizar esta acción, poseer un usuario y una contraseña o una llave rsa para la máquina con ip pública como para las máquina en la red interna.
Podemos por ejemplo conectarnos directamente al ssh de la maquina
con ip pública ejecutando:
$ ssh -L 22000:maquina-interna:22 usuario@maquina-publica
Dicho comando tiene como resultado que en el puerto número 22000 de
nuestra máquina local sera el extremo de entrada de un túnel que tendrá como
extremo de salida la maquina que pusimos como máquina-interna
en el puerto 22.
Una ves
realizado esto tendremos una terminal conectada a la maquina con ip pública y podemos ejecutar
$ ssh usuario2@localhost -p 22000
En este momento usuario2 es el nombre de usuario con el que nos tenemos que
conectar a la maquina interna.
De esta manera toda la comunicación se realiza mediante el túnel
brindándonos acceso al maquina interna.
Un efecto que nos puede interesar evitar, es que al iniciar el túnel nos quede una sesión abierta en una
consola (que de ser cerrada, cerrara el túnel). A tal fin podemos ejecutar el
comando ssh en modo foreground de la siguiente manera
$ ssh -fqN -L 22000:maquina-interna:22 usuario@maquina-publica
Una vez que se comprueba que el túnel funciona podemos guardar todas
estas configuraciones de modo no tengamos que recordarlas cada ves que
necesitamos realizar el tunnel. Para esto editamos el archivo
~/.ssh/config y agregamos las siguientes lineas:
Host <nombre o alias para la maquina>
Hostname <ip o nombre de la maquina pública>
User <usuario de la maquina interna>
Localforward <puerto local> <ip o nombre de la maquina interna>:<puerto destino en la maquina interna>