En el conjunto /etc/ssh/sshd
de la computadora B :
AllowTcpForwarding yes
TCPKeepAlive yes
Desde la computadora A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
Desde la computadora B :
$ ssh localhost -p 2222
Tenga en cuenta que 2222 es un número arbitrario de puerto alto que elegí. Ese puerto en la computadora B se volverá a tunelizar a través de la conexión SSH inicializada en la computadora A al puerto 22. Si tiene varias máquinas, debe usar un puerto diferente para cada máquina.
Para su caso de uso, es probable que desee ejecutar esto desde un script para que pueda convertirlo en un demonio e intentar volver a conectarse periódicamente si se cae el enlace. Probablemente desee una cuenta especial con un shell de solo /bin/true
en la computadora B para manejar las conexiones entrantes. Luego puede configurar una sola tecla o varias teclas para cada máquina a las que se les permite "llamar a casa".
En el equipo A se puede encontrar el -n
, -N
y -T
opciones útiles para desconectarlo de entrada local (por lo que puede ejecutarse en segundo plano), no intente ejecutar cualquier comando a distancia, basta con abrir el túnel, y no crear un TTY.
La mayoría de los métodos normales para generar un demonio no funcionan muy bien con la configuración de un túnel de red como este. Un problema en la conectividad de la red haría que intentara derribar el muro para atravesarlo. Un simple bucle con un sueño para esperar debería ser suficiente. Diez minutos es un buen número porque no inunda la red y registra los archivos con intentos si hay un problema (como que la Computadora B está fuera de línea) pero aún así te devuelve razonablemente rápido si la conexión se cae.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Un script como ese se puede ejecutar lanzado en el arranque /etc/rc.local
. Su primer cambio para iniciar la sesión en la máquina empezará a unos diez minutos después de que el equipo A botas.