Seguimiento: Parece que la serie rápida de desconexiones que coinciden con unos pocos meses de ejecución de cada servidor probablemente sea una coincidencia y solo sirvió para revelar el problema real. La razón por la que no se pudo reconectar es casi seguro debido a los valores de AliveInterval (respuesta de kasperd). El uso de la opción ExitOnForwardFailure debería permitir que el tiempo de espera se produzca correctamente antes de volver a conectar, lo que debería resolver el problema en la mayoría de los casos. La sugerencia de MadHatter (el script de eliminación) es probablemente la mejor manera de asegurarse de que el túnel pueda volver a conectarse incluso si todo lo demás falla.
Tengo un servidor (A) detrás de un firewall que inicia un túnel inverso en varios puertos a un pequeño DigitalOcean VPS (B) para poder conectarme a A a través de la dirección IP de B. El túnel ha estado funcionando de manera constante durante aproximadamente 3 meses, pero de repente ha fallado cuatro veces en las últimas 24 horas. Lo mismo sucedió hace un tiempo en otro proveedor de VPS: meses de funcionamiento perfecto, y de repente múltiples fallas rápidas.
Tengo un script en la máquina A que ejecuta automáticamente el comando del túnel ( ssh -R *:X:localhost:X address_of_B
para cada puerto X) pero cuando se ejecuta, dice Warning: remote port forwarding failed for listen port X
.
Entrar en el sshd /var/log/secure
en el servidor muestra estos errores:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
Resolver requiere reiniciar el VPS. Hasta entonces, todos los intentos de reconexión dan el mensaje "error de reenvío de puerto remoto" y no funcionarán. Ahora es el punto donde el túnel solo dura aproximadamente 4 horas antes de detenerse.
Nada ha cambiado en el VPS, y es una máquina de un solo uso y un solo usuario que solo sirve como punto final del túnel inverso. Está ejecutando OpenSSH_5.3p1 en CentOS 6.5. Parece que sshd no está cerrando los puertos cuando se pierde la conexión. No puedo explicar por qué, o por qué sucedería repentinamente ahora después de meses de operación casi perfecta.
Para aclarar, primero necesito entender por qué sshd se niega a escuchar en los puertos después de que falla el túnel, lo que parece ser causado por sshd que deja los puertos abiertos y nunca los cierra. Ese parece ser el principal problema. Simplemente no estoy seguro de qué haría que se comportara de esta manera después de meses de comportarse como esperaba (es decir, cerrar los puertos de inmediato y permitir que el script se vuelva a conectar).