Túnel SSH

¿Qué es un túnel SSH?
Un túnel SSH es una conexión SSH que transforma un puerto X en tu equipo, en el puerto Y de otra máquina, pasando por una tercera.

¿Se entiende?
Es probable que no, así que me explicaré con detalles.

Una conexión “tradicional”, es cuando quiero acceder a un cierto servicio en otra máquina, y me conecto directamente a ella. Tal como se muestra en la imagen a continuación.

Conexión Tradicional

Pero, ¿qué pasa cuando aún necesito conectarme a esa máquina, pero por alguna razón ya no puedo conectarme directamente?

En este caso, lo que se hace es usar un tunel SSH.

  • Flechas Azules: Conexiones que si son posibles realizar.
  • Flecha Verde: Túnel SSH. Conexión al otro equipo, pasando por el equipo que puede conectarse.
  • Flecha Roja: Conexión en un puerto local, equivale a la conexión de la flecha roja de la imagen anterior.

Tunel SSH

¿Y como funciona?

$ ssh -L <puerto local>:<el otro equipo>:<puerto en el otro equipo> <equipo que puede conectarse> -l <usuario para el equipo que puede conectarse>

Por ejemplo, el servidor de Tareas (carretas.inf.utfsm.cl) del LabComp está restringido para ser accesado solo desde las IP’s del DI. Para conectarme a éste seria algo así como:

$ ssh -L 6666:carretas:22 ssh2.inf.utfsm.cl -l rcovarru

En el ejemplo, se podría haber omitido el -l rcovarru, ya que el usuario de mi equipo es exactamente igual.
Además, como ven, al nombre del servidor de tareas no se le agregó el dominio, eso es solo el equipo al que me estoy conectado (ssh2) también pertenece al mismo dominio.

Ok, pero ese comando extraño, ¿Qué hace?
Transforma el puerto 6666 de mi equipo, en el puerto 22 (puerto de ssh) de carretas.

Esto significa, que ahora me podré conectar “directamente” a carretas por el túnel, con:

$ ssh -p 6666 localhost -l usuario-en-carretas

Mientras que la conexión SSH esté viva, el túnel se mantendrá igual.

😉

Esto, funciona para cualquier tipo de puerto, no solo para comunicarse por ssh. Si quieren conectar, por ejemplo, al servidor postgresql de carretas, el tunel debería ser:

$ ssh -L 6666:carretas:5432 ssh2.inf.utfsm.cl -l rcovarru

Y luego, la conexión de psql deberia ser algo así como:

$ psql -p 6666 -h localhost dbname pguser

Lindo, no? 😀

Comments

5 responses to “Túnel SSH”

  1. cristianf Avatar
    cristianf

    muy lindo, bien explicado (Y)

    gracias por el tiempo que le dedicaste

  2. mapacheUY (Alejandro Ferrari) Avatar

    Muy buen tutorial, sencillo y clarito. Gracias. (H)

  3. […] Entrada original de Renato Covarrubias-Romero […]

  4. Jorge Sepulveda ✓ Avatar

    gracias, por dedicar parte de tu tiempo a los “novatos con temperamento”…

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.