Executando túnel ssh em loop; péssima ideia? Porta já em uso?

Executando túnel ssh em loop; péssima ideia? Porta já em uso?

Eu configurei um túnel ssh de um servidor que está fisicamente localizado onde trabalho (ele roda CentOS) para casa (Ubuntu) para que eu possa fazer login no meu túnel de trabalho de casa, usando um comando como este no computador de trabalho:

ssh -R 49666:localhost:22 homename@homeIP -N

Eu fiz as chaves, etc. Eu fiz o ssh do trabalho para casa e, enquanto estava remotamente no meu computador de casa, voltei ao trabalho para testá-lo. Parecia bom, funcionou. Eu poderia scp arquivos nos dois sentidos, etc.

Mais tarde, quando voltei para casa, descobri que o túnel havia fechado por algum motivo. Eu não conseguia descobrir o porquê. Mais tarde, perguntei a um colega de trabalho sobre isso e ele disse que tinha o mesmo problema e usa um script como este em execução constante em seu computador de trabalho:

while true
 ssh -R 49666:localhost:22 homename@homeIP -N
 sleep 15

Ele basicamente faz isso funcionar perpetuamente, para reiniciar um túnel quebrado automaticamente quando ele quebrar.

Eu tentei isso também, fiz o teste (passei do trabalho para casa enquanto estava fisicamente no trabalho remotamente usando meu computador doméstico) e pareceu bom novamente. Mas, novamente, quando voltei para casa, o túnel não funcionou. Examinei auth.log e encontrei essas três linhas no mesmo carimbo de data e hora, que seria quando eu estava na metade do caminho para casa:

Accepted publickey from work IP (I erased the rest for my privacy)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666

Parece que ele tentou vincular meu túnel à porta 49666 enquanto outra coisa o estava usando. Ok, entendo por que isso falharia. Então tentei descobrir o que está usando a porta 49666 para poder eliminá-la. Mas nada parece ser. Tentei netstat, lsof, etc. Nada está usando a porta 49666. Acho que NUNCA alguma coisa usa a porta 49666, exceto o túnel. Será que ele fez o túnel quando o túnel já existia? Ou se o túnel já existisse, o script de loop de tunelamento simplesmente não faria nada?

Como nada está usando a porta 49666, eu esperaria que o túnel fosse restabelecido automaticamente quando o script do túnel no meu computador de trabalho passar pelo loop novamente, mas não parece que seja.

Existe uma maneira de resolver isso sem voltar fisicamente ao servidor no trabalho? Ou pelo menos resolvê-lo com apenas um ajuste para não ter que voltar regularmente?

O servidor nunca desliga, então, em teoria, o script de loop ainda deveria estar em execução. Mas será que ele terminaria depois de não conseguir chegar ao túnel, talvez?

informação relacionada