Túnel SSH al rescate

Publicado 10-04-2016

El problema

Ayer nos surgió un problema, un cliente solicitó nuestros servicios para instalar un Redmine, que es una aplicación de gestión de proyectos hecha en Ruby On Rails. El problema es que este cliente la quería instalada en una máquina interna en su empresa que no es visible desde fuera.

Para que pudiéramos llegar a dicha máquina nos facilitó acceso SSH a uno de sus routers GNU/Linux y desde allí podíamos lanzar otro SSH a su máquina final.

Hasta ahí todo bien, con dos SSH estábamos en la máquina interna y podíamos instalar RVM, Rails y todo el stuff. El problema surge cuando queremos ver la web de la aplicación para comprobar que funciona y seguir configurando.

La solución

SSH nos permite lanzar un túnel desde nuestra máquina de trabajo hasta la primera máquina del cliente, el router y allí redireccionar un puerto, que en realidad es un puerto de nuestro máquina de trabajo, hacia la máquina final, la que tiene la web.

Más visualmente:

  • TRABAJO: El equipo desde el que estamos trabajando, nuestro portátil, por ejemplo.
  • ROUTER: El router del cliente en GNU/Linux.
  • WEB: Servidor en el que estamos instalando la aplicación, dentro de la red del cliente.

TRABAJO:80 --Túnel ssh con ROUTER redirige a--> WEB:80

Para conseguir esto utilizamos el maravilloso programa de conexión remota y segura SSH, y simplemente con esta orden:

sudo ssh -i /home/miusuario/.ssh/id_rsa root@router.cliente.com -L 80:ip_interna_web:80 -N

Lo tenemos que ejecutar con sudo ya que el puerto 80 local sólo lo puede abrir un usuario con privilegios. Podríamos hacer que funcionase en el 8080, por ejemplo, y no necesitaríamos sudo.

La opción -i nos permite usar la key de SSH de nuestro usuario normal, ya que al hacer sudo intentará utilizar la de root.

Así de fácil, ahora sólo tenemos que apuntar nuestro navegador a http://localhost y estaremos viendo la web remota.

Comentarios por Disqus