Soluzione 1:
Usa -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
La combinazione ServerAliveInterval=15,ServerAliveCountMax=3
fa apparire gli errori I/O dopo un minuto di interruzione della rete. Questo è importante ma in gran parte non documentato. Se ServerAliveInterval
l'opzione è lasciata al valore predefinito (quindi senza il controllo vivo), i processi che sperimentano il blocco dell'I/O sembrano dormire indefinitamente, anche dopo che sshfs ottiene reconnect
'ed. Lo considero un comportamento inutile.
In altre parole cosa succede su -o reconnect
senza assegnare ServerAliveInterval
è che qualsiasi I/O avrà successo o bloccherà l'applicazione a tempo indeterminato se ssh si riconnette al di sotto. Di conseguenza, un'applicazione tipica diventa completamente bloccata. Se desideri consentire a I/O di restituire un errore e riprendere l'applicazione, hai bisogno di ServerAliveInterval=1
o superiore.
Il ServerAliveCountMax=3
è comunque il valore predefinito, ma mi piace specificarlo per leggibilità.
Soluzione 2:
Grazie per i consigli di autossh e autofs.
Tuttavia, per il mio scopo diretto ho trovato una soluzione molto più semplice che non è stata documentata così bene:
sshfs -o reconnect server:/path/to/mount
Soluzione 3:
Autossh riconnette automaticamente le sessioni ssh quando rileva che ssh è morto o ha smesso di trasmettere traffico. Dal momento che è solo ssh automatizzato, funzionerà da diversi IP e dalla sospensione (anche se il laptop si riattiva su una LAN diversa).
Soluzione 4:
Una cosa che potresti fare è montare i tuoi filesystem tramite autofs. Autofs è uno strumento che monterà un filesystem quando si utilizza qualcosa nella directory in cui verrà montato il filesystem. Quando rileva attività, il filesystem viene montato. Quando non accade nulla sul filesystem, viene smontato.
Ecco un howto che ho trovato su google per ottenere questo risultato, ce ne sono molti altri.
Soluzione 5:
Sospetto che non ci sia, perché anche se puoi configurare il tuo client SSH per non interrompere la connessione, il server potrebbe essere configurato per farlo dopo un determinato periodo di inattività e non saresti in grado di ignorarlo. Anche se potessi, se non riprendessi mai la connessione, il server rimarrebbe sospeso e nel tempo ciò potrebbe portare a un notevole spreco di risorse del server.
Una tecnica migliore, penso, è smontare il filesystem prima di sospendere il computer e rimontarlo quando il computer si riattiva. Il meccanismo per farlo può dipendere esattamente da come sospendi il tuo computer:io uso il kernel tuxonice e per fare qualcosa del genere ho una direttiva come
Unmount /mnt/sshfs
in /etc/hibernate/common.conf
.