Obrigado pelas dicas de autossh e autofs.
No entanto, para meu objetivo direto, encontrei uma solução muito mais simples que não foi documentada tão bem:
sshfs -o reconnect server:/path/to/mount
Estou usando o SSHFS do meu laptop para um servidor central.
Obviamente, a montagem do SSHFS é interrompida após uma desconexão mais longa (por exemplo, durante a suspensão), fazendo a conexão SSH subjacente expirar.
Existe uma maneira de obter montagens SSHFS sobrevivendo a desconexões de longa duração (> 5 min) ou até mesmo uma nova discagem com um IP diferente?
Use -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
A combinação ServerAliveInterval=15,ServerAliveCountMax=3
faz com que os erros de E / S sejam exibidos após um minuto de interrupção da rede. Isso é importante, mas em grande parte não documentado. Se a opção ServerAliveInterval
for deixada no padrão (portanto, sem a verificação ativa), os processos que experimentam parada de E / S parecem suspender indefinidamente, mesmo depois que o sshfs obtiver reconnect
'ed. Eu considero isso um comportamento inútil.
Em outras palavras, o que acontece em -o reconnect
sem atribuir ServerAliveInterval
é que qualquer E / S terá êxito ou trará o aplicativo indefinidamente se o ssh se reconectar por baixo. Um aplicativo típico fica totalmente suspenso como resultado. Se você quiser permitir que a E / S retorne um erro e retome o aplicativo, será necessário ServerAliveInterval=1
ou maior.
O ServerAliveCountMax=3
é o padrão, mas eu gostaria de especificá-lo para facilitar a leitura.
Autossh reconecta automaticamente as sessões ssh quando percebe que o ssh morreu ou parou de passar o tráfego. Como é apenas o ssh automatizado, ele funciona a partir de IPs diferentes e da suspensão (mesmo que o laptop acorde em uma lan diferente).
Uma coisa que você pode fazer é montar seus sistemas de arquivos via autofs . O autofs é uma ferramenta que monta um sistema de arquivos quando você usa algo no diretório para o qual o sistema de arquivos será montado. Quando detecta atividade, o sistema de arquivos é montado. Quando nada está acontecendo no sistema de arquivos, ele é desmontado.
Aqui está um howto que encontrei no google para realizar isso, lá onde vários outros.
Suspeito que não exista, porque mesmo que você possa configurar seu cliente SSH para não deixar cair a conexão, o servidor pode estar configurado para fazer isso 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 ficaria pendente 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 seu computador e remontá-lo quando o computador voltar a funcionar. O mecanismo para fazer isso pode depender exatamente de como você suspende seu computador - eu uso o kernel do tuxonice e para fazer algo assim eu tenho uma diretiva como
Unmount /mnt/sshfs
em /etc/hibernate/common.conf
.