Qué es el túnel SSH inverso? (y cómo usarlo)

  • Dave McKay

    @TheGurkha

  • 18 de julio de 2019, 9:00am EDT
Eny Setiyowati/.com

¿Necesitas SSH a un ordenador Linux inalcanzable? Haz que te llame, y luego hurga en esa conexión para conseguir tu propia sesión SSH remota. Le mostramos cómo.

Cuándo querrá usar el túnel SSH inverso

A veces, los ordenadores remotos pueden ser difíciles de alcanzar. El sitio en el que se encuentran puede tener reglas de firewall estrictas, o tal vez el administrador local ha establecido complejas reglas de traducción de direcciones de red. ¿Cómo se puede llegar a un ordenador de este tipo si necesita conectarse a él?

Establezcamos algunas etiquetas. Tu ordenador es el ordenador local porque está cerca de ti. El ordenador al que te vas a conectar es el ordenador remoto porque está en una ubicación diferente a la tuya.

Publicidad

Para diferenciar entre los ordenadores locales y remotos utilizados en este artículo, el ordenador remoto se llama «howtogeek» y está ejecutando Ubuntu Linux (con ventanas de terminal moradas). El ordenador local se llama «Sulaco» y está ejecutando Manjaro Linux (con ventanas de terminal amarillas).

Normalmente se dispara una conexión SSH desde el ordenador local y se conecta al ordenador remoto. Eso no es una opción en el escenario de red que estamos describiendo. Realmente no importa cuál es el problema específico de la red – esto es útil cuando no se puede SSH directamente a un equipo remoto.

Pero si la configuración de red en su extremo es sencilla, el equipo remoto puede conectarse a usted. Sin embargo, esto no es suficiente para sus necesidades, porque no le proporciona una sesión de línea de comandos de trabajo en el equipo remoto. Pero es un comienzo. Tiene una conexión establecida entre los dos ordenadores.

La respuesta está en el túnel SSH inverso.

¿Qué es el túnel SSH inverso?

El túnel SSH inverso le permite utilizar esa conexión establecida para establecer una nueva conexión desde su ordenador local al ordenador remoto.

Publicidad

Debido a que la conexión original vino de la computadora remota hacia usted, usarla para ir en la otra dirección es usarla «en reversa». Y como SSH es seguro, estás poniendo una conexión segura dentro de una conexión segura existente. Esto significa que su conexión al ordenador remoto actúa como un túnel privado dentro de la conexión original.

Y así llegamos al nombre de «túnel SSH inverso».

¿Cómo funciona?

El túnel SSH inverso se basa en que el ordenador remoto utiliza la conexión establecida para escuchar nuevas peticiones de conexión del ordenador local.

El ordenador remoto escucha en un puerto de red del ordenador local. Si detecta una solicitud de SSH a ese puerto, retransmite esa solicitud de conexión a sí mismo, por la conexión establecida. Esto proporciona una nueva conexión desde el ordenador local al ordenador remoto.

Publicidad

Es más fácil de configurar que de describir.

Using SSH Reverse Tunneling

SSH ya estará instalado en su ordenador Linux, pero es posible que tenga que iniciar el demonio SSH (sshd) si el ordenador local nunca ha aceptado conexiones SSH antes.

sudo systemctl start sshd

Para que el demonio SSH se inicie cada vez que reinicie su ordenador, utilice este comando:

sudo systemctl enable sshd

En el ordenador remoto, utilizamos el siguiente comando.

  • La opción -R (inversa) indica a ssh que se deben crear nuevas sesiones SSH en el ordenador remoto.
  • La opción «43022:localhost:22» indica a ssh que las solicitudes de conexión al puerto 43022 del ordenador local se deben reenviar al puerto 22 del ordenador remoto. El puerto 43022 fue elegido porque aparece como no asignado. No es un número especial.
  • [email protected] es la cuenta de usuario a la que se va a conectar el equipo remoto en el equipo local.
ssh -R 43022:localhost:22 [email protected]

Es posible que aparezca una advertencia de que nunca se ha conectado al equipo local. O puede ver una advertencia cuando los detalles de la conexión se añaden a la lista de hosts SSH reconocidos. Lo que ve -si es que ve algo- depende de si alguna vez se han realizado conexiones desde el equipo remoto al equipo local.

Publicidad

Se le pedirá la contraseña de la cuenta que está utilizando para conectarse al equipo local.

Nota que cuando se ha realizado la conexión el prompt de comandos cambia de dave@howtogeek a dave@sulaco.

Ahora estamos conectados al ordenador local desde el ordenador remoto. Eso significa que podemos emitir comandos a él. Utilicemos el comando who para ver los inicios de sesión en el ordenador local.

who

Podemos ver que la persona con la cuenta de usuario llamada dave ha iniciado sesión en el ordenador local, y el ordenador remoto se ha conectado (utilizando las mismas credenciales de usuario) desde la dirección IP 192.168.4.25.

Relacionado: Cómo determinar la cuenta de usuario actual en Linux

Conectándose al ordenador remoto

Dado que la conexión desde el ordenador remoto es exitosa, y está escuchando conexiones, podemos intentar conectarnos al ordenador remoto desde el local.

Publicidad

El ordenador remoto está escuchando en el puerto 43022 del ordenador local. Así que -de forma algo contraintuitiva- para hacer una conexión con el ordenador remoto, pedimos a ssh que haga una conexión el ordenador local, en el puerto 43022. Esa petición de conexión será reenviada al ordenador remoto.

ssh localhost -p 43022

Se nos pide la contraseña de la cuenta de usuario, y luego nos conectamos al ordenador remoto desde el ordenador local. Nuestro ordenador Manjaro dice felizmente, «Bienvenido a Ubuntu 18.04.2 LTS».

Nota que el prompt de comandos ha cambiado de dave@sulaco a dave@howtogeek. Hemos logrado nuestro objetivo de hacer una conexión SSH a nuestra computadora remota difícil de alcanzar.

Usando SSH con Claves

Para hacer más conveniente la conexión de la computadora remota a la local, podemos configurar claves SSH.

En el ordenador remoto, escriba este comando:

ssh-keygen

Publicidad

Se le pedirá una frase de contraseña. Puedes pulsar Enter para ignorar las preguntas de la frase de acceso, pero no es recomendable. Significaría que cualquier persona en el equipo remoto podría hacer una conexión SSH a su equipo local sin ser desafiado por una contraseña.

Tres o cuatro palabras separadas por símbolos harán una frase de contraseña robusta.

Se generarán sus claves SSH.

Necesitamos transferir la clave pública al equipo local. Utilice este comando:

ssh-copy-id [email protected]

Publicidad

Se le pedirá la contraseña de la cuenta de usuario con la que se está conectando, en este caso, [email protected].

La primera vez que realice una solicitud de conexión desde el ordenador remoto al local, tendrá que proporcionar la frase de contraseña. No tendrá que volver a introducirla para futuras solicitudes de conexión, mientras esa ventana de terminal permanezca abierta.

Relacionado: Cómo crear e instalar claves SSH desde el shell de Linux

No todos los túneles dan miedo

Algunos túneles pueden ser oscuros y tortuosos, pero el túnel SSH inverso no es demasiado difícil de navegar si puede mantener la relación entre el equipo remoto y el equipo local recta en su cabeza. Entonces inviértala.

Dave McKay
Dave McKay utilizó por primera vez los ordenadores cuando la cinta de papel perforada estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de la informática, ahora es un periodista de tecnología a tiempo completo. A lo largo de su carrera, ha trabajado como programador autónomo, director de un equipo internacional de desarrollo de software, gestor de proyectos de servicios informáticos y, más recientemente, como responsable de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Read Full Bio »

Deja una respuesta

Tu dirección de correo electrónico no será publicada.