Acompanhamento: Parece que a série rápida de desconexões que coincide com alguns meses de execução de cada servidor provavelmente é coincidência e serviu apenas para revelar o problema real. A razão pela qual ele não conseguiu se reconectar é quase certamente devido aos valores AliveInterval (resposta de kasperd). O uso da opção ExitOnForwardFailure deve permitir que o tempo limite ocorra corretamente antes de se reconectar, o que deve resolver o problema na maioria dos casos. A sugestão do MadHatter (o script de interrupção) é provavelmente a melhor maneira de garantir que o túnel possa se reconectar, mesmo se tudo falhar.
Eu tenho um servidor (A) atrás de um firewall que inicia um túnel reverso em várias portas para um pequeno DigitalOcean VPS (B), para que eu possa conectar-me a A via endereço IP de B. O túnel trabalha de forma consistente há cerca de três meses, mas falhou repentinamente quatro vezes nas últimas 24 horas. A mesma coisa aconteceu há algum tempo em outro provedor de VPS - meses de operação perfeita e, de repente, várias falhas rápidas.
Eu tenho um script na máquina A que executa automaticamente o comando tunnel ( ssh -R *:X:localhost:X address_of_B
para cada porta X), mas quando é executado, ele diz Warning: remote port forwarding failed for listen port X
.
Entrar no sshd /var/log/secure
no servidor mostra estes erros:
bind: Address already in use
error: bind: Address already in use
error: channel_setup_fwd_listener: cannot listen to port: X
A solução requer a reinicialização do VPS. Até então, todas as tentativas de se reconectar transmitem a mensagem "falha no encaminhamento de porta remota" e não funcionam. Agora é o ponto em que o túnel dura apenas cerca de 4 horas antes de parar.
Nada mudou no VPS e é uma máquina de usuário único e uso único que serve apenas como ponto final do túnel reverso. Está executando o OpenSSH_5.3p1 no CentOS 6.5. Parece que o sshd não fecha as portas quando a conexão é perdida. Não sei explicar por que, ou por que isso aconteceria repentinamente agora, depois de meses de operação quase perfeita.
Para esclarecer, primeiro preciso descobrir por que o sshd se recusa a ouvir as portas após a falha do túnel, o que parece ser causado pelo sshd deixar as portas abertas e nunca fechá-las. Esse parece ser o principal problema. Só não tenho certeza do que faria com que ele se comportasse dessa maneira depois de meses se comportando como eu esperava (por exemplo, fechando as portas imediatamente e permitindo que o script se reconecte).