Eny Setiyowati / Shutterstock.com
¿Necesita SSH para 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á usar 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 reglas estrictas de firewall, o tal vez el administrador local tenga una configuración compleja. Traducción de Direcciones de Red normas. ¿Cómo acceder a una computadora de este tipo 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 las computadoras locales y remotas que se usan 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 lanzas un Conexión SSH desde la computadora local y conéctese a la computadora remota. Esta no es una opción en el escenario de redes que estamos describiendo. Independientemente del problema de red específico, esto es útil siempre que no pueda conectarse directamente a una computadora remota usando SSH.
Pero si la configuración de la red en su extremo es simple, la computadora remota puede conectarse a usted. Sin embargo, esto por sí solo no es suficiente para sus necesidades, ya que 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 esta conexión establecida para establecer una nueva conexión desde su computadora local a la computadora remota.
Dado que la conexión original le llegó desde la computadora remota, usarla para ir en sentido contrario es como usarla «al revés». Y debido a que SSH es seguro, está colocando una conexión segura en 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 de «tunelización SSH inversa».
¿Como funciona?
La tunelización SSH inversa se basa en la computadora remota que usa 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 en este puerto, se transmite esta solicitud de conexión a sí mismo, por 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 máquina Linux, pero es posible que deba iniciar el demonio SSH (sshd) si la máquina local nunca antes ha aceptado conexiones SSH.
sudo systemctl start sshd
Para que el demonio SSH se inicie cada vez que reinicie su computadora, use este comando:
sudo systemctl enable sshd
En la computadora remota, usamos el siguiente comando.
- los
-R
(reverso) la opción dicessh
que se deben crear nuevas sesiones SSH en la computadora remota. - El «43022: localhost: 22» indica
ssh
que las solicitudes de conexión al puerto 43022 en la computadora local se deben reenviar al puerto 22 en la computadora remota. Se eligió el puerto 43022 porque es listado como no asignado. Este no es un tema especial. - dave@sulaco.local es la cuenta de usuario a la que se conectará la computadora remota en la computadora local.
ssh -R 43022:localhost:22 dave@sulaco.local
Es posible que reciba una advertencia de que nunca antes se ha conectado a la computadora local. O puede ver una advertencia cuando se agregan detalles de la conexión a la lista de hosts SSH reconocidos. Lo que ve, si lo hay, depende de si ya se han realizado conexiones entre la computadora remota y la computadora local.
Se le pedirá que ingrese la contraseña de la cuenta que usa para iniciar sesión en la computadora local.
Tenga en cuenta que una vez establecida 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. Esto significa que podemos enviarle pedidos. Vamos a usarlo who
comando para ver las conexiones en la computadora local.
who
Podemos ver que la persona con la cuenta de usuario llamada dave ha iniciado sesión en la computadora local y la computadora remota ha iniciado sesión (usando las mismas credenciales de usuario) desde allí ‘dirección IP 192.168.4.25.
Conexión a la computadora remota
Dado que la conexión desde la computadora remota es exitosa y está escuchando conexiones, podemos intentar conectarnos a la computadora remota desde la computadora local.
La computadora remota escucha en el puerto 43022 en la computadora local. Entonces, algo contrario a la intuición, para establecer una conexión con la computadora remota, pedimos ssh
para establecer una conexión con la computadora local, en el puerto 43022. Esta solicitud de conexión se enviará a la computadora remota.
ssh localhost -p 43022
Se nos solicita la contraseña de la cuenta de usuario, luego nos conectamos a la computadora remota desde la computadora local. Nuestra computadora Manjaro dice felizmente, «Bienvenido a Ubuntu 04 / 18.2 LTS».
Tenga en cuenta que el símbolo del sistema ha cambiado de dave @ sulaco a dave @ howtogeek. Hemos logrado nuestro objetivo de establecer una conexión SSH a nuestra computadora remota de difícil acceso.
Usar SSH con claves
Para facilitar la conexión de la computadora remota a la computadora local, podemos configurar las claves SSH.
En la computadora remota, escriba este comando:
ssh-keygen
Se le pedirá que ingrese una frase de contraseña. Puede presionar Enter para ignorar las preguntas de la frase de contraseña, pero esto no se recomienda. Esto significaría que cualquier persona en la computadora remota podría establecer 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 segura.
Se generarán sus claves SSH.
Necesitamos transferir la clave pública a la computadora local. Utilice este comando:
ssh-copy-id dave@sulaco.local
Se le pedirá que ingrese la contraseña de la cuenta de usuario a la que se está conectando, en este caso dave@sulaco.local.
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, siempre que esta ventana de terminal permanezca abierta.
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 en su cabeza. Luego inviértalo. Para facilitar las cosas, siempre puedes configurar un archivo de configuración SSH que le permite simplificar cosas como túneles o transferencia de agente ssh.