Usar -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
A combinação ServerAliveInterval=15,ServerAliveCountMax=3
faz com que os erros de E / S apareçam após um minuto de interrupção da rede. Isso é importante, mas em grande parte não documentado. Se a ServerAliveInterval
opção for deixada no padrão (portanto, sem a verificação ativa), os processos que experimentam travamento de E / S parecem adormecer indefinidamente, mesmo após o sshfs ser reconnect
editado. Eu considero isso um comportamento inútil.
Em outras palavras, o que acontece -o reconnect
sem atribuir ServerAliveInterval
é que qualquer E / S terá êxito ou interromperá o aplicativo indefinidamente se o ssh se reconectar por baixo. Um aplicativo típico fica totalmente paralisado como resultado. Se você deseja permitir que a E / S retorne um erro e retome o aplicativo, você precisa ServerAliveInterval=1
ou mais.
O ServerAliveCountMax=3
é o padrão de qualquer maneira, mas eu gosto de especificá-lo para facilitar a leitura.
man 5 ssh_config
para mais detalhes, mas o essencial é que a cada 15 segundos o ssh enviará algo como um ping 'keep-alive' a cada 15 segundos para garantir que os computadores ainda estejam respondendo uns aos outros. Se três pings consecutivos falharem (45 segundos), reconecte.ServerAliveCountMax=3
tem um significado diferente. Se houver uma falha, ele tentará se reconectar mais três vezes e desistirá. Em algum momento, a nova tentativa é inútil, mas isso depende do aplicativo. Então, novamente, acho que a página de manual pode ser mais específica, existem diferentes maneiras de interpretar a maneira como está escrita como IMO. FWIW, meu problema específico desapareceu depois de mudar para o ProtonVPN. Eu acho que é também de configuração ssh vale a pena conferir no cliente e no servidor, eles têm opções diferentes, então tudo que você precisa realmente é-o reconnect
Obrigado pelas dicas de autossh e autofs.
No entanto, para meu objetivo direto, encontrei uma solução muito mais simples que não estava tão bem documentada:
fonte
O Autossh reconecta automaticamente as sessões ssh quando percebe que o ssh morreu ou parou de passar o tráfego. Uma vez que é apenas ssh automatizado, funcionará a partir de IPs diferentes e de suspensão (mesmo que o laptop acorde em uma LAN diferente).
fonte
Uma coisa que você pode fazer é montar seus sistemas de arquivos via autofs . Autofs é uma ferramenta que monta um sistema de arquivos quando você usa algo no diretório em que o sistema de arquivos será montado. Quando detecta atividade, o sistema de arquivos está montado. Quando nada está acontecendo no sistema de arquivos, ele é desmontado.
Aqui está um howto que eu encontrei no google para fazer isso, lá onde vários outros.
fonte
Eu suspeito que não exista, porque mesmo que você possa configurar seu cliente SSH para não interromper a conexão, o servidor poderá ser configurado para fazê-lo após um período especificado de inatividade e você não poderá substituí-lo. Mesmo que você pudesse, se nunca retomasse a conexão, o servidor seria interrompido e, com o tempo, isso poderia levar a um desperdício significativo de recursos do servidor.
Uma técnica melhor, eu acho, é desmontar o sistema de arquivos antes de suspender o computador e remontá-lo quando o computador acordar novamente. O mecanismo para fazer isso pode depender exatamente de como você suspende o computador - eu uso o kernel do tuxonice e, para fazer algo assim, tenho uma diretiva como
no
/etc/hibernate/common.conf
.fonte
A resposta de kubanczyk é ótima. Eu tive um problema com o congelamento de toda a interface por causa de sshfs gananciosos, agora para facilitar a conexão iniciada por um script que reconecta quando o laptop é aberto e que não congela quando a conexão fica mais lenta, você pode usar um script do bash assim (talvez não muito seguro, mas conveniente para muitos projetos da web, por exemplo):
fonte