Pregunta relacionada: iniciar la conexión ssh del servidor al cliente
La respuesta desde allí me ayudó mucho, este comando hace lo que necesito:
ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP
Entonces escribí el guión para volver a conectar todo el tiempo:
#!/bin/bash
while true; do
echo "try to connect..."
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
echo "restarting in 5 seconds.."
sleep 5
done
Y lo agregó a la /etc/crontab
. Pero descubrí que funciona si solo lo ejecuto "a mano" desde shell, pero si lo llama cron, ssh se conecta e inmediatamente termina. (Entonces, el script anterior se vuelve a conectar todo el tiempo)
De man ssh
, descubrí que para las conexiones en segundo plano debería llamarlo con -n
clave, pero no ayudó. Luego, solo busqué scripts similares y descubrí que funciona si llamo tail -f something
, es decir, un comando "interminable", así que acabo de crear un archivo vacío /tmp/dummy_file
y ahora mi comando ssh se ve así:
ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file
¡Ahora funciona! Pero, esta solución parece un poco fea, además, realmente no entiendo las razones reales de ese comportamiento. Por casualidad, intenté llamar en bash
lugar de tail -f
(también bash
me parece un comando "interminable"), pero no funciona.
Entonces, ¿alguien podría explicar este comportamiento, y cuál es la forma correcta de crear una conexión ssh en segundo plano para mantener el túnel ssh inverso?
fuente
&
al final de su comando ssh:ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &
while
ciclo se ejecutará una y otra vez, comenzando una nuevassh
conexión de fondo cada 5 segundos, ¿verdad? Esto no es lo que necesito.Respuestas:
Parece que quieres la
-N
opción de ssh.fuente
Te sugiero encarecidamente que lo consideres
autossh
. Tiene ciertas heurísticas que le permitirán determinar si la pérdida de conexión es la razón subyacente y disminuirá la frecuencia de los intentos de reconexión. Además, monitorea la conexión mediante túneles adicionales, lo que lo hace muy útil para escenarios como el que está preguntando.Si está en Ubuntu, por ejemplo, puede hacer una búsqueda en la web para
autossh upstart
encontrar algunos ejemplos útiles sobre cómo configurar Ubuntu para que el túnel se mantenga de manera persistente.Estoy usando esto para mantener una conexión tunelizada abierta a mi servidor en todo momento para ciertos servicios.
fuente
autossh
, leí este artículo: goo.gl/jVuuSR , pero solo funcionó para mí si tengo conexión a Internet de inmediato en el arranque del sistema; pero si la conexión se establece más tarde, no funcionó. No estoy seguro, tal vez hice algo mal, pero incluso en este artículo el autor tienesleep 10
en el suyo/etc/rc.local
, para asegurarse de que la conexión a Internet ya esté lista cuando se llama a autossh.upstart
y otros reemplazos de inicio, puede vincular el inicio del túnel a uno o más dispositivos de red en funcionamiento. La mejor de las soluciones (IMO) en la web es esta: erik.torgesta.com/tag/ssh-upstart ... y desleep 10
todos modos no ayudará nada en algunos casos extremos.ssh-upstart
echarle un vistazo!Voy a segunda @ sugerencia de 0xC0000022L y el uso
autossh
también. Lo uso para mantener una conexión SSH desde mi computadora portátil mientras la llevo de un lugar a otro y simplemente funciona. Utilizo esta conexión para hacer un túnel en los puertos 25 y 2143 para acceder a mis servidores personales SMTP e IMAP.Aquí está el script que uso:
Luego mantengo una
Host
entrada en mi$HOME/.ssh/config
archivo para hostimap-o
.El
autossh_mail.sh
script se ejecuta como parte de mi escritorio cuando inicio sesión. Puede acceder a través degnome-session-properties
.fuente