Frage SSHFS-Mount, das überlebt, wird getrennt


Ich benutze SSHFS Mounts von meinem Laptop zu einem zentralen Server.

Offensichtlich ist der SSHFS-Mount nach einer längeren Verbindungsunterbrechung (z. B. während des Aussetzens) unterbrochen, weil die zugrunde liegende SSH-Verbindung abgelaufen ist.

Gibt es eine Möglichkeit SSHFS-Mounts zu erhalten, die lang andauernde Verbindungsunterbrechungen (> 5 min) oder sogar eine erneute Einwahl mit einer anderen IP überstehen?


43
2018-05-09 22:27


Ursprung




Antworten:


Danke für die Tipps von autossh und autofs.

Für meinen direkten Zweck fand ich jedoch eine viel einfachere Lösung, die nicht so gut dokumentiert war:

sshfs -wiederverbinden server:/path/to/mount

46
2018-05-10 21:04



Süss! Das macht mich wirklich wollen, authentifizieren-auf-schreiben: serverfault.com/q/379728/96905 - Jeff Burdges


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

Die Kombination ServerAliveInterval=15,ServerAliveCountMax=3 bewirkt, dass die E / A-Fehler nach einer Minute Netzwerkausfall auftreten. Dies ist wichtig, aber weitgehend undokumentiert. Ob ServerAliveInterval Wenn die Option auf der Standardeinstellung belassen wird (also ohne die Alive-Prüfung), scheinen Prozesse, bei denen E / A hängen bleibt, unbegrenzt zu schlafen, auch nachdem die sshfs gegriffen haben reconnect"Ed. Ich halte das für ein nutzloses Verhalten.

Mit anderen Worten, was passiert -o reconnect ohne zuzuweisen ServerAliveInterval ist, dass jede E / A erfolgreich sein wird, oder die Anwendung auf unbestimmte Zeit aufhängen, wenn die SSH die Verbindung wieder herstellt. Eine typische Anwendung wird dadurch vollständig gehängt. Wenn Sie zulassen möchten, dass E / A einen Fehler zurückgibt und die Anwendung fortsetzt, müssen Sie ServerAliveInterval=1 oder größer.

Das ServerAliveCountMax=3 ist sowieso der Standard, aber ich mag es für die Lesbarkeit angeben.


43
2017-10-26 14:11



Das hat es für mich gemacht. Sie können auch ein kürzeres Intervall verwenden, afaik sollte es nicht zu viel Ärger verursachen und macht die ganze Sache reaktionsfähiger. - Manux
Ich habe die Dokumente nicht gelesen, aber ich sah eine andere Lösung sagen "ServerAliveCountMax = 0" bedeutet, dass es weiterhin unendlich versuchen wird. Ich nehme an, Ihre Lösung gibt es 3 Wiederholungen nach jedem Fehler? - PJ Brunet
@ PJBrunet man 5 ssh_config Für mehr Details, aber der Kernpunkt ist, dass ssh alle 15 Sekunden alle 15 Sekunden so etwas wie einen Keep-Alive-Ping sendet, um sicherzustellen, dass die Computer immer noch aufeinander reagieren. Wenn drei aufeinanderfolgende Pings fehlschlagen (45 Sekunden), schließen Sie die Verbindung erneut an. - Wyatt8740
@ Wyatt8740 Ich studierte das mehr und las die Dokumentation, glaube ich ServerAliveCountMax=3 hat eine andere Bedeutung. Wenn es einen Fehler gibt, versucht es 3 weitere Male erneut zu verbinden und gibt dann auf. Zu einem bestimmten Zeitpunkt ist ein erneuter Versuch sinnlos, aber das hängt von der Anwendung ab. Andererseits denke ich, dass die Manpage spezifischer sein könnte, es gibt verschiedene Wege, die Art zu interpretieren, wie sie IMO formuliert ist. FWIW mein spezifisches Problem ging nach dem Wechsel zu ProtonVPN weg. Ich denke, es ist auch wert, ssh-Konfiguration auf dem Client und dem Server zu überprüfen, sie haben separate Optionen, so dass alles, was Sie wirklich brauchen, ist -o reconnect - PJ Brunet
@ PJBrunet Der wirkliche Grund ist in der Antwort angegeben, aber weitgehend undokumentiert: "Ohne diese Optionen [ServerAliveInterval] scheinen Prozesse, die E / A hängen, auf unbestimmte Zeit zu schlafen, selbst nachdem die sshfs wieder verbunden wird". Ich erweitere meine Antwort ein wenig, um dies noch deutlicher zu machen. Du hast recht - ServerAliveCountMax = 3 ist der Standardwert und daher überflüssig. - kubanczyk


Autosh Slash-Sitzungen werden automatisch neu verbunden, wenn festgestellt wird, dass SSH abgestorben ist oder den Verkehr nicht mehr weitergibt. Da es nur ssh automatisiert ist, funktioniert es von verschiedenen IPs und aus dem Suspend (auch wenn der Laptop auf einem anderen LAN aufwacht).


11
2018-05-09 23:30



Vielleicht Mosh ist noch besser für eine interaktive SSH-Sitzung. - Martin Ueding
@MartinUeding Ich schaute Mosh auf, aber a) funktioniert nicht mit sshfs b) es scheint, dass Sie es auch auf dem Server installieren müssen, was es weniger attraktiv macht, IMO. - PJ Brunet


Eine Sache, die Sie tun können, ist, Ihre Dateisysteme über zu mounten Autofs. Autofs ist ein Tool, das ein Dateisystem bereitstellt, wenn Sie etwas in dem Verzeichnis verwenden, in das das Dateisystem eingehängt wird. Wenn es eine Aktivität erkennt, wird das Dateisystem gemountet. Wenn nichts auf dem Dateisystem passiert, wird es unmounted.

Hier ist ein wie man Ich fand auf Google, um dies zu erreichen, dort waren mehrere andere.


8
2018-05-10 00:24





Ich vermute, dass dies nicht der Fall ist, denn selbst wenn Sie Ihren SSH-Client so konfigurieren können, dass die Verbindung nicht getrennt wird, ist der Server möglicherweise nach einer bestimmten Inaktivitätsphase so konfiguriert, dass Sie ihn nicht überschreiben können. Selbst wenn Sie könnten, wenn Sie die Verbindung nie wieder aufnehmen würden, würde der Server hängen bleiben und mit der Zeit könnte dies zu einer erheblichen Verschwendung von Serverressourcen führen.

Eine bessere Technik, denke ich, besteht darin, das Dateisystem zu deaktivieren, bevor Sie Ihren Computer anhalten und neu mounten, wenn der Computer wieder aufwacht. Der Mechanismus dafür hängt davon ab, wie genau Sie Ihren Computer aussetzen - ich benutze den tuxonice-Kernel und mache so etwas wie eine Anweisung wie

Unmount /mnt/sshfs

im /etc/hibernate/common.conf.


2
2018-05-09 23:16