Solution 1 :
Utilisez -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
La combinaison ServerAliveInterval=15,ServerAliveCountMax=3
provoque l'apparition des erreurs d'E/S après une minute de panne du réseau. C'est important mais largement non documenté. Si ServerAliveInterval
l'option est laissée par défaut (donc sans la vérification active), les processus qui subissent un blocage d'E/S semblent dormir indéfiniment, même après que le sshfs obtient reconnect
'éd. Je considère cela comme un comportement inutile.
En d'autres termes, que se passe-t-il sur -o reconnect
sans affecter ServerAliveInterval
est que toute E/S réussira ou bloquera l'application indéfiniment si le ssh se reconnecte en dessous. Une application typique devient alors entièrement bloquée. Si vous souhaitez autoriser les E/S à renvoyer une erreur et à reprendre l'application, vous avez besoin de ServerAliveInterval=1
ou plus.
Le ServerAliveCountMax=3
est la valeur par défaut de toute façon, mais j'aime le spécifier pour plus de lisibilité.
Solution 2 :
Merci pour les conseils d'autossh et d'autofs.
Cependant, pour mon objectif direct, j'ai trouvé une solution beaucoup plus simple qui n'était pas si bien documentée :
sshfs -o reconnect server:/path/to/mount
Solution 3 :
Autossh reconnecte automatiquement les sessions ssh lorsqu'il remarque que ssh est mort ou a cessé de transmettre du trafic. Puisqu'il s'agit simplement de ssh automatisé, il fonctionnera à partir de différentes adresses IP et de la suspension (même si l'ordinateur portable se réveille sur un autre réseau local).
Solution 4 :
Une chose que vous pouvez faire est de monter vos systèmes de fichiers via autofs. Autofs est un outil qui montera un système de fichiers lorsque vous utiliserez quelque chose dans le répertoire sur lequel le système de fichiers sera monté. Lorsqu'il détecte une activité, le système de fichiers est monté. Quand rien ne se passe sur le système de fichiers, est-il démonté.
Voici un howto que j'ai trouvé sur google pour y parvenir, il y en a plusieurs autres.
Solution 5 :
Je soupçonne que ce n'est pas le cas, car même si vous pouvez configurer votre client SSH pour ne pas interrompre la connexion, le serveur peut être configuré pour le faire après une période d'inactivité spécifiée, et vous ne pourrez pas annuler cela. Même si vous le pouviez, si vous ne rétablissiez jamais la connexion, le serveur resterait suspendu et, au fil du temps, cela pourrait entraîner un gaspillage important des ressources du serveur.
Une meilleure technique, je pense, consiste à démonter le système de fichiers avant de suspendre votre ordinateur et à le remonter lorsque l'ordinateur se réveille à nouveau. Le mécanisme pour le faire peut dépendre exactement de la façon dont vous suspendez votre ordinateur - j'utilise le noyau tuxonice et pour faire quelque chose comme ça, j'ai une directive comme
Unmount /mnt/sshfs
en /etc/hibernate/common.conf
.