it-swarm-pt.tech

Montagem SSHFS que sobrevive à desconexão

Estou usando o SSHFS montado do meu laptop em um servidor central.

Obviamente, a montagem SSHFS é interrompida após uma desconexão mais longa (por exemplo, durante a suspensão), pois o tempo limite da conexão SSH subjacente é excedido.

Existe uma maneira de obter montagens SSHFS sobrevivendo a desconexões duradouras (> 5 min) ou até mesmo uma re-discagem com um IP diferente?

60
bene

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:

sshfs -o reconnect server:/path/to/mount
54
bene

Usar -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

A combinação ServerAliveInterval=15,ServerAliveCountMax=3 causa erros de E/S após um minuto de interrupção na 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 sofrem interrupção de E/S parecem adormecer indefinidamente, mesmo depois que o sshfs for 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 será bem-sucedida ou suspenderá 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 de ServerAliveInterval=1 ou melhor.

O ServerAliveCountMax=3 é o padrão de qualquer maneira, mas eu gosto de especificá-lo para facilitar a leitura.

65
kubanczyk

Autossh reconecta automaticamente as sessões ssh quando percebe que o ssh morreu ou parou de transmitir 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).

12
kband

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 eu encontrei no google para fazer isso, lá onde vários outros.

9
Zoredache

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 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

Unmount /mnt/sshfs

no /etc/hibernate/common.conf.

2
David Z

O resposta de kubanczyk é ótimo. 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 como esse (talvez não muito seguro, mas conveniente para muitos projetos da web, por exemplo):

#!/bin/bash
echo PWD | sshfs [email protected]:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
1
Timofey Bugaevsky