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

Indicador SSH en una computadora portátil
Eny Setiyowati / Shutterstock.com

¿Necesita SSH a una computadora Linux inalcanzable? Haga que lo llame, luego busque esa conexión para obtener su propia sesión SSH remota. Te mostramos cómo.

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

A veces, las computadoras remotas pueden ser difíciles de alcanzar. El sitio en el que se encuentran puede tener estrictas reglas de firewall, o quizás el administrador local haya configurado complejas reglas de traducción de direcciones de red . ¿Cómo llega a una computadora así si necesita conectarse a ella?

Establezcamos algunas etiquetas. Su computadora es la computadora local porque está cerca de usted. La computadora a la que se va a conectar es la computadora remota porque está en una ubicación diferente a la suya.

Para diferenciar entre las computadoras locales y remotas que se utilizan en este artículo, la computadora remota se llama «howtogeek» y está ejecutando Ubuntu Linux (con ventanas terminales de color púrpura). La computadora local se llama «Sulaco» y está ejecutando Manjaro Linux (con ventanas de terminal amarillas).

Normalmente, iniciaría una conexión SSH desde la computadora local y se conectaría a la computadora remota. Esa no es una opción en el escenario de redes que estamos describiendo. Realmente no importa cuál sea el problema específico de la red; esto es útil siempre que no pueda SSH directamente a una computadora remota.

Pero si la configuración de red en su extremo es sencilla, la computadora remota puede conectarse a usted. Sin embargo, eso por sí solo no es suficiente para sus necesidades, porque no le proporciona una sesión de línea de comandos que funcione en la computadora remota. Pero es un comienzo. Tiene una conexión establecida entre las dos computadoras.

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

¿Qué es el túnel SSH inverso?

El túnel SSH inverso le permite usar esa conexión establecida para configurar una nueva conexión desde su computadora local a la computadora remota.

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

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

¿Como funciona?

El túnel SSH inverso se basa en que la computadora remota utilice la conexión establecida para escuchar nuevas solicitudes de conexión desde la computadora local.

La computadora remota escucha en un puerto de red en la computadora local. Si detecta una solicitud SSH a ese puerto, transmite esa solicitud de conexión a sí mismo, a través de la conexión establecida. Esto proporciona una nueva conexión desde la computadora local a la computadora remota.

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

Uso de túnel inverso SSH

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

sudo systemctl start sshd

sudo systemctl inicia sshd en una ventana de terminal

Para que el demonio SSH se inicie cada vez que reinicie su computadora, use este comando:

sudo systemctl habilitar sshd

sudo systemctl habilita sshd en una ventana de terminal

En la computadora remota, usamos el siguiente comando.

  • La -Ropción (inversa) indica sshque se deben crear nuevas sesiones SSH en la computadora remota.
  • El “43022: localhost: 22” indica  sshque las solicitudes de conexión al puerto 43022 en la computadora local deben reenviarse al puerto 22 en la computadora remota. Se eligió el puerto 43022 porque está listado como no asignado . No es un número especial.
  • [email protected] es la cuenta de usuario a la que se conectará la computadora remota en la computadora local.
ssh -R 43022: localhost: 22 [email protected]

ssh -R 43022: localhost: 22 dave@sulaco.local en una ventana de terminal

Es posible que reciba una advertencia acerca de que nunca antes se había conectado a la computadora local. O puede ver una advertencia cuando los detalles de la conexión se agregan a la lista de hosts SSH reconocidos. Lo que ve, en todo caso, depende de si alguna vez se han realizado conexiones desde la computadora remota a la computadora local.

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

Detalles de la conexión SSH en una ventana de terminal

Tenga en cuenta que cuando se ha realizado la conexión, el símbolo del sistema cambia de dave @ howtogeek a dave @ sulaco.

Ahora estamos conectados a la computadora local desde la computadora remota. Eso significa que podemos enviarle comandos. Usemos el whocomando para ver los inicios de sesión en la computadora local.

OMS

el comando who en una ventana de terminal

Podemos ver que la persona con la cuenta de usuario llamada dave ha iniciado sesión en la computadora local y la computadora remota se ha conectado (usando las mismas credenciales de usuario) desde la dirección IP 192.168.4.25.

Conexión a la computadora remota

Debido a que la conexión desde la computadora remota es exitosa y está escuchando conexiones, podemos intentar conectarnos a la computadora remota desde la local.

La computadora remota está escuchando en el puerto 43022 en la computadora local. Entonces, de manera algo contraria a la intuición, para hacer una conexión a la computadora remota, pedimos sshhacer una conexión a la computadora local, en el puerto 43022. Esa solicitud de conexión se reenviará a la computadora remota.

ssh localhost -p 43022

ssh localhost -p 43022 en una ventana de terminal

Se nos solicita la contraseña de la cuenta de usuario y luego nos conectamos a la computadora remota desde la computadora local. Nuestra computadora Manjaro dice felizmente, «Bienvenido a Ubuntu 18.04.2 LTS».

Conexión de túnel ssh inversa a computadora remota

Tenga en cuenta que el símbolo del sistema ha cambiado de dave @ sulaco a dave @ howtogeek. Hemos logrado nuestro objetivo de hacer una conexión SSH a nuestra computadora remota de difícil acceso.

Usar SSH con claves

Para que sea más conveniente conectarse desde la computadora remota a la computadora local, podemos configurar claves SSH.

En la computadora remota, escriba este comando:

ssh-keygen

ssh-keygen en una ventana de terminal

Se le pedirá una frase de contraseña. Puede presionar Enter para ignorar las preguntas de la frase de contraseña, pero esto no se recomienda. Significaría que cualquier persona en la computadora remota podría hacer una conexión SSH a su computadora local sin que se le solicite una contraseña.

Tres o cuatro palabras separadas por símbolos formarán una frase de contraseña sólida.

generación de clave ssh en una ventana de terminal

Se generarán sus claves SSH.

Necesitamos transferir la clave pública a la computadora local. Utilice este comando:

ssh-copy-id [email protected]

ssh-copy-id dave@sulaco.local en una ventana de terminal

Se le pedirá la contraseña de la cuenta de usuario en la que está iniciando sesión, en este caso, [email protected].

transferir claves SSH a la computadora local en una ventana de terminal

La primera vez que realice una solicitud de conexión desde la computadora remota a la computadora local, deberá proporcionar la frase de contraseña. No tendrá que ingresarlo nuevamente para futuras solicitudes de conexión, mientras esa ventana de terminal permanezca abierta.

cuadro de diálogo de solicitud de frase de contraseña

No todos los túneles dan miedo

Algunos túneles pueden ser oscuros y sinuosos, pero el túnel SSH inverso no es demasiado difícil de navegar si puede mantener la relación entre la computadora remota y la computadora local directamente en su cabeza. Luego inviértalo.