Mesmo que isto não seja uma resposta directa à sua pergunta, está altamente relacionado com o problema que tem. Em vez de tentar manter a ligação viva (todas as ligações eventualmente morrem) pode usar multiplexadores de terminal, como screen
e tmux
que mantêm a sessão viva em segundo plano, mesmo que o seu terminal seja desligado.
Essencialmente quando faz login no servidor SSH executa imediatamente screen
que irá criar e anexar uma nova sessão:
$ screen
Depois vai em frente e faz o seu trabalho com a shell como faria normalmente. Agora, se a ligação cair, quando puder voltar a estar online e voltar a ligar-se ao servidor através do SSH, obterá uma lista das sessões actuais com:
$ screen -ls
Para voltar a ligar a uma sessão:
$ screen -r <session>
onde <session>
é o PID ou o nome de uma sessão. Será reconectado à sua sessão e poderá continuar de onde parou!
Pode até desligar a sessão e voltar a ligar-se a partir de casa para retomar a partir do ponto exacto em que parou. Para desligar a sessão usa C-a
seguido de C-d
& (ou seja Control + A
e depois Control + D
).
Existe também tutorial simples online .
Usando screen
e tmux
em servidores remotos é considerado uma prática melhor* e é elevadamente recomendado*. Algumas pessoas chegam ao ponto de ter screen
como a sua shell de login predefinida, por isso quando se ligam iniciam imediatamente uma nova sessão screen
.