¿Necesita SSH a una computadora Linux inalcanzable? Haga que lo llame, después 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 lograr. El sitio en el que se encuentran puede tener estrictas reglas de firewall, o tal vez el administrador local haya configurado complejas Traducción de Direcciones de Red normas. ¿Cómo llega a una computadora así si necesita conectarse a ella?
Establezcamos algunas etiquetas. Tu computadora es la local computadora debido a que está cerca de usted. La computadora a la que se va a conectar es la remoto computadora debido a que está en una ubicación distinto a la tuya.
Para diferenciar entre las computadoras locales y remotas que se usan en este post, la computadora remota se llama «systempeaker» 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).
Regularmente dispararías un Conexión SSH desde la computadora local y conéctese a la computadora remota. Esa no es una alternativa en el escenario de redes que estamos describiendo. Verdaderamente no importa cuál sea el problema específico de la red; esto es útil siempre que no pueda SSH de forma directa a una computadora remota.
Pero si la configuración de red en su extremo es sencilla, la computadora remota puede conectarse a usted. A pesar de esto, eso por sí solo no es suficiente para sus necesidades, debido a que no le proporciona una sesión de línea de comandos que funcione en la computadora remota. Pero es un comienzo. Cuenta con una conexión establecida entre las dos computadoras.
La solución está en el túnel SSH inverso.
¿Qué es el túnel SSH inverso?
El túnel SSH inverso le posibilita utilizar 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 para usted, usarlo para ir en la otra dirección es usarlo «al revés». Y debido a que 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?
La tunelización SSH inversa se basa en la computadora remota que utiliza 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 de la computadora local para 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 factible que deba iniciar el demonio SSH (sshd) si la computadora 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
La opción (inversa) 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 debido a que es 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]
Es factible que reciba una advertencia con relación a 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, si es que ve algo, depende de si en algún momento se han realizado conexiones desde la computadora remota a la computadora local.
Se le pedirá la contraseña de la cuenta que está usando para conectarse a la computadora local.
Tenga en cuenta que cuando se ha realizado la conexión, el símbolo del sistema cambia de dave @ systempeaker a dave @ sulaco.
Ahora estamos conectados a la computadora local desde la computadora remota. Eso significa que podemos enviarle comandos. Usemos el who
comando para ver los inicios de sesión 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 se ha conectado (usando 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
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 determinar una conexión con la computadora remota, pedimos ssh
para hacer una conexión con la computadora local, en el puerto 43022. Esa solicitud de conexión se reenviará a la computadora remota.
ssh localhost -p 43022
Se nos solicita la contraseña de la cuenta de usuario y después nos conectamos a la computadora remota desde la computadora local. Nuestra computadora Manjaro dice felizmente, «Bienvenido a Ubuntu 18.04.2 LTS».
Tenga en cuenta que el símbolo del sistema ha cambiado de dave @ sulaco a dave @ systempeaker. Hemos logrado nuestro objetivo de determinar una conexión SSH a nuestra computadora remota de difícil acceso.
Utilizar 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
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.
Se generarán sus claves SSH.
Necesitamos transferir la clave pública a la computadora local. Utilice este comando:
ssh-copy-id [email protected]
Se le pedirá la contraseña de la cuenta de usuario en la que está iniciando sesión, en esta circunstancia, [email protected].
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.
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 sinuosos, pero el túnel SSH inverso no es demasiado difícil de navegar si puede mantener la vinculación entre la computadora remota y la computadora local de forma directa en su cabeza. Después inviértalo. Para facilitar las cosas, siempre puedes configurar un archivo de configuración SSH que le posibilita aprovechar al máximo cosas como la construcción de túneles o reenvío de agente ssh.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);