Was ist ein besserer Weg, um mit Server-Disconnects von sshfs-Mounts umzugehen?

58

Ich habe mehrere Verzeichnisse über sshfs gemountet . Ich bekomme manchmal Verbindungsabbrüche vom Server (von mir nicht konfigurierbar). Normalerweise mounte ich die Verzeichnisse so

sshfs [email protected]:/home/user /mnt/example

Wenn ein Server die Verbindung trennt, wird das sshfs Subsystem nicht umount / befreien Sie das Verzeichnis , sondern sperrt sie unzugänglich. Die Halterung ist während der Eingabe weiterhin sichtbar mount. Wenn ich tippe

ls /mnt/example

Der Prozess wird gesperrt (auch Ctrl+ chilft nicht). Ich mache deshalb

sudo umount -l /mnt/example
# find pid of corresponding process:
ps aux | grep example.com
kill -9 <pid of locked sshfs process>

Gibt es einen besseren Weg, damit umzugehen? Offensichtlich sollte sshfs das umount machen und aufräumen ... Idealerweise würde es sich automatisch wieder verbinden.

Sebastian
quelle
Dies ist ein Job für einen automatisch wiederverbindenden TCP-Tunnel .
Gilles 'SO- hör auf böse zu sein'
4
irgendeine lösung mit gepflegter software?
Sebastian

Antworten:

45

Sie können sshfs mit der Option "reconnect" ausführen. Wir verwenden sshfs mit PAM / automount, um Serverdateien für jede Workstation in unserem Netzwerk freizugeben. Wir verwenden -o reconnect als Parameter für sshfs, hauptsächlich, weil unsere Benutzer ihre Computer angehalten haben und sshfs beim Aufwachen keine Verbindung mehr herstellen (oder antworten oder so).

Zum Beispiel:

sshfs [email protected]:/home/mvaldez/REMOTE /home/mvaldez/RemoteDocs -o reconnect,idmap=user,password_stdin,dev,suid

Nur eine Anmerkung: Wenn der Remote-Computer wirklich nicht verfügbar ist, reagiert sshfs möglicherweise für längere Zeit nicht mehr.

MV.
quelle
11

Dies kann durch Verringern des Timeouts umgangen werden. Ergänzen Sie $HOME/.ssh/configoder um /etc/ssh/ssh_config:

ServerAliveInterval 15
ServerAliveCountMax 3

Dies führt zu einem Timeout von 45 Sekunden.

Thor
quelle
3
Dies würde nur helfen, wenn das Problem die Schuld von SSH ist. Es gibt ein größeres Problem, sshfsdas sich nicht mit dem Tod des zugrunde liegenden sshProzesses befasst.
Bahamat
Dies ist in der Tat nur eine Problemumgehung und sollte in sshfs behoben werden.
Thor
Aber nur ein Workaround, der sich mit einer von vielen Ursachen befasst. Sein Problem hat vielleicht nichts mit Keepalives zu tun. Bei der Frage geht es weniger um die Ursache als vielmehr darum, einen konsistenten Zustand zu erreichen.
Bahamat
5

Ich habe einen Server, den ich für die Speicherung verwende, und aus Platzgründen bewahre ich ihn an einem anderen Ort auf. Um die Dateien in mein Netzwerk zu bringen, benutze ich einen Himbeer-Pi, der die Dateien vom Server mit sshfs mounten kann.

Vor kurzem musste ich wegen eines Stromausfalls auf Raspbian Jessie upgraden und stellte fest, dass sshfs ernsthaft instabil werden. Die Ordner wären ordnungsgemäß geladen, aber nach einiger Zeit könnte ich keine Verbindung zu ihnen herstellen, und der Himbeer-Pi würde einfrieren, wenn ich den Inhalt der Ladeflächen auflisten wollte.

Was ich versucht habe war:

  1. verwendet wieder in der fstab verbinden
  2. hat ServerAliveInterval und ServerAliveCountMax in der Datei .ssh / config verwendet, aber ohne Erfolg.
  3. andere lösungen lese ich in den meisten foren.

aber keine Würfel! Bis ich die fstab-Datei wie folgt geändert habe:

sshfs#user@server:/remote/folder /local/mount/dir fuse IdentityFile=sshkeyfile,Port=XXX,uid=1000,gid=1000,allow_other,_netdev,ServerAliveInterval=45,ServerAliveCountMax=2,reconnect,noatime,auto 0 0

Und es funktioniert! Keine Unterbrechungen mehr! Ich sehe so aus, als würde sshfs aus irgendeinem Grund die ssh-Konfigurationsdatei nicht lesen und die Keep-Alive-Signale wurden nie gesendet.

Lucian
quelle
3

Das klingt nach einem Job für Autofs. Es ist ziemlich geschickt darin, Netzwerk-Mounts verschiedener Art (nfs, samba, sshfs, wie Sie es nennen) zu handhaben und zu bemerken, wann diese Dinge neu gemountet werden müssen. Es kann sich auch darum kümmern, sie nach Zeiträumen der Nichtbenutzung abzuhängen und sie anzuhängen, wenn eine Dateisystemanforderung gestellt wird.

Caleb
quelle
11
autofs erledigt die Verbindung bei Bedarf und kann im Leerlauf getrennt werden (was das problematische Zeitfenster verringert), aber es hilft nicht, wenn sshfs hängt, weil der Server die Verbindung getrennt hat.
Gilles 'SO- hör auf böse zu sein'
1

Wenn immer noch Menschen auf dieses Problem stoßen, konnte ich es immer noch nicht beheben. Ich habe eine funktionierende Problemumgehung gefunden.

Das folgende Ruby-Skript hat es geschafft. Es erstellt immer wieder einen Ordner mit dem Namen "keepalive". Lass das einfach so lange laufen, bis es unendlich ist.

$i =1 
$num =0
begin
    puts("Inside the loop i = #$i" )
    $i +=1
    puts 'creating obj'
    system 'mkdir  /{yourmountpoint}/keepalive'
    sleep 5
    puts 'we did it, it should be still alive'
end while $i > $num

Ich weiß nicht warum das funktioniert. Aber es scheint mein Problem zu lösen, wenn ich für eine Minute inaktiv bin und alles einfriert. Es wird nur versucht, einen Ordner am Einhängepunkt zu erstellen, und das scheint zu verhindern, dass die Verbindung getrennt wird und alles irgendwie einfriert.

Vudew
quelle
6
Wenn das für Sie funktioniert, brauchen Sie kein Skript und keinen Ruby-Interpreter. Eine einzelne Zeile wäre genauso gut:while true; do mkdir -p /x/y; sleep 2; done
mivk