Lösung 1:
Verwenden Sie -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
Die Kombination ServerAliveInterval=15,ServerAliveCountMax=3
bewirkt, dass die E/A-Fehler nach einer Minute Netzwerkausfall angezeigt werden. Dies ist wichtig, aber weitgehend undokumentiert. Wenn ServerAliveInterval
Option auf Standard belassen wird (also ohne die Alive-Prüfung), scheinen Prozesse, bei denen I/O hängen bleibt, auf unbestimmte Zeit zu schlafen, selbst nachdem sshfs reconnect
erhält 'ed. Ich halte dies für ein nutzloses Verhalten.
Mit anderen Worten, was auf -o reconnect
passiert ohne ServerAliveInterval
zuzuweisen besteht darin, dass alle I/O entweder erfolgreich sind oder die Anwendung auf unbestimmte Zeit aufhängen, wenn der ssh darunter erneut eine Verbindung herstellt. Eine typische Anwendung hängt sich dadurch vollständig auf. Wenn Sie zulassen möchten, dass I/O einen Fehler zurückgibt und die Anwendung fortsetzt, benötigen Sie ServerAliveInterval=1
oder höher.
Die ServerAliveCountMax=3
ist sowieso der Standard, aber ich gebe es gerne für die Lesbarkeit an.
Lösung 2:
Danke für die Tipps zu autossh und autofs.
Für meinen direkten Zweck fand ich jedoch eine viel einfachere Lösung, die nicht so gut dokumentiert war:
sshfs -o reconnect server:/path/to/mount
Lösung 3:
Autossh verbindet ssh-Sitzungen automatisch neu, wenn es feststellt, dass ssh gestorben ist oder den Datenverkehr gestoppt hat. Da es sich nur um automatisiertes SSH handelt, funktioniert es von verschiedenen IPs und vom Suspend (selbst wenn der Laptop in einem anderen LAN aufwacht).
Lösung 4:
Eine Sache, die Sie tun könnten, ist, Ihre Dateisysteme über autofs zu mounten. Autofs ist ein Tool, das ein Dateisystem einhängt, wenn Sie etwas in dem Verzeichnis verwenden, in das das Dateisystem eingehängt wird. Wenn es Aktivität erkennt, wird das Dateisystem gemountet. Wenn auf dem Dateisystem nichts passiert, wird es ausgehängt.
Hier ist eine Anleitung, die ich bei Google gefunden habe, um dies zu erreichen, es gab mehrere andere.
Lösung 5:
Ich vermute, dass dies nicht der Fall ist, denn selbst wenn Sie Ihren SSH-Client so konfigurieren können, dass er die Verbindung nicht trennt, ist der Server möglicherweise so konfiguriert, dass er dies nach einer bestimmten Zeit der Inaktivität tut, und Sie könnten dies nicht außer Kraft setzen. Selbst wenn Sie könnten, würde der Server hängen bleiben, wenn Sie die Verbindung nie wiederherstellen, und im Laufe der Zeit könnte dies zu einer erheblichen Verschwendung von Serverressourcen führen.
Ich denke, eine bessere Technik besteht darin, das Dateisystem zu unmounten, bevor Sie Ihren Computer anhalten, und es erneut zu mounten, wenn der Computer wieder aufwacht. Der Mechanismus dafür kann davon abhängen, wie Sie Ihren Computer genau anhalten - ich verwende den Tuxonice-Kernel und um so etwas zu tun, habe ich eine Direktive wie
Unmount /mnt/sshfs
in /etc/hibernate/common.conf
.