Vraag SSHFS-mount die de verbinding overleeft


ik gebruik SSHFS mounts vanaf mijn laptop naar een centrale server.

Het is duidelijk dat de SSHFS-mount is verbroken na een langere disconnect (bijvoorbeeld tijdens suspend), waardoor de onderliggende SSH-verbinding is verstreken.

Is er een manier om SSHFS-mounts te krijgen die langdurige ontkoppelingen overleven (> 5 min.) Of zelfs een re-dialin met een ander IP?


43
2018-05-09 22:27


oorsprong




antwoorden:


Bedankt voor de tips van autossh en autofs.

Voor mijn directe doel vond ik echter een veel eenvoudigere oplossing die niet zo goed gedocumenteerd was:

sshfs -Om opnieuw te verbinden server:/path/to/mount

46
2018-05-10 21:04



Zoet! Dit maakt dat ik echt authenticate-on-write wil regelen: serverfault.com/q/379728/96905 - Jeff Burdges


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

De combinatie ServerAliveInterval=15,ServerAliveCountMax=3 zorgt ervoor dat de I / O-fouten verschijnen na een minuut uitvallen van het netwerk. Dit is belangrijk maar grotendeels ongedocumenteerd. Als ServerAliveInterval optie blijft standaard staan ​​(dus zonder de levend check), processen die I / O hang ervaren lijken voor onbepaalde tijd te slapen, zelfs nadat de sshf's zijn opgehaald reconnect'Ed. Ik beschouw dit als een nutteloos gedrag.

Met andere woorden wat er gebeurt -o reconnect zonder toe te wijzen ServerAliveInterval is dat elke I / O of zal slagen of de toepassing voor onbepaalde tijd zal ophangen als de ssh zich er opnieuw mee verbindt. Een typische toepassing wordt hierdoor volledig opgehangen. Als u wilt dat I / O een fout retourneert en de toepassing hervat, moet u dit doen ServerAliveInterval=1 of groter.

De ServerAliveCountMax=3 is hoe dan ook de standaard, maar ik geef het graag op leesbaarheid.


43
2017-10-26 14:11



Dit maakte het voor mij. U kunt ook een korter interval gebruiken, dit zou niet al te veel problemen moeten veroorzaken en zorgt ervoor dat alles beter reageert. - Manux
Ik heb de documenten niet gelezen, maar ik zag een andere oplossing zeggen dat "ServerAliveCountMax = 0" betekent dat het voor onbepaalde tijd blijft proberen. Ik neem aan dat je oplossing na elke fout 3 nieuwe pogingen geeft? - PJ Brunet
@PJBrunet man 5 ssh_config voor meer details, maar de essentie is dat elke 15 seconden ssh iets zoiets als een 'keep-alive' ping stuurt om de 15 seconden om ervoor te zorgen dat de computers nog steeds op elkaar reageren. Als drie opeenvolgende pings mislukken (45 seconden), sluit u opnieuw aan. - Wyatt8740
@ Wyatt8740 Ik heb dit meer bestudeerd en lees de documentatie, geloof ik ServerAliveCountMax=3 heeft een andere betekenis. Als er een fout is, probeert deze nog 3 keer opnieuw verbinding te maken en geeft dan op. Op een gegeven moment is opnieuw proberen zinloos, maar dat hangt af van de toepassing. Aan de andere kant denk ik dat de man-pagina specifieker kan zijn, er zijn verschillende manieren om de manier te interpreteren waarop IMO is geformuleerd. FWIW mijn specifieke probleem ging weg na het overschakelen op ProtonVPN. Ik denk dat het ook de moeite waard is om ssh-configuratie op de client en de server te controleren, ze hebben afzonderlijke opties, dus alles wat je echt nodig hebt is -o reconnect - PJ Brunet
@PJBrunet De echte reden is vermeld in het antwoord, maar grotendeels zonder papieren: "Zonder deze opties [ServerAliveInterval] lijken processen die I / O-hang ervaren, onbeperkt te slapen, zelfs nadat de sshf's opnieuw verbonden zijn". Ik ben mijn antwoord aan het uitbreiden om dit nog meer te verduidelijken. Je hebt gelijk - ServerAliveCountMax = 3 is de standaard dus overbodig. - kubanczyk


Autossh maakt automatisch opnieuw verbinding met ssh-sessies wanneer het merkt dat ssh is gestorven of gestopt met passerend verkeer. Omdat het alleen maar geautomatiseerde SSH is, werkt het vanaf verschillende IP's en van slaapstand (zelfs als de laptop op een andere LAN ontwaakt).


11
2018-05-09 23:30



Misschien Mosh is zelfs beter voor een interactieve SSH-sessie. - Martin Ueding
@MartinUeding Ik heb Mosh opgezocht maar a) werkt niet met sshf's b) het lijkt erop dat je het ook op de server moet installeren, waardoor het minder aantrekkelijk wordt, IMO. - PJ Brunet


Een ding dat je zou kunnen doen is je bestandssystemen koppelen via autofs. Autofs is een tool die een bestandssysteem aankoppelt wanneer je iets gebruikt in de map waarnaar het bestandssysteem zal worden gemount. Wanneer het activiteit detecteert, wordt het bestandssysteem gemount. Als er niets gebeurt op het bestandssysteem, is het niet aangekoppeld.

Hier is een hoe Ik vond op google om dit te bereiken, daar waar verschillende anderen.


8
2018-05-10 00:24





Ik vermoed dat dit niet het geval is, want zelfs als je je SSH-client kunt configureren om de verbinding niet te verwijderen, is de server mogelijk geconfigureerd om dit te doen na een opgegeven periode van inactiviteit en zou je dat niet kunnen negeren. Zelfs als je zou kunnen, als je nooit de verbinding hervat, zou de server blijven hangen, en na verloop van tijd zou dit kunnen leiden tot een aanzienlijke verspilling van serverbronnen.

Een betere techniek, denk ik, is om het bestandssysteem te ontkoppelen voordat je je computer ophangt en opnieuw te koppelen wanneer de computer weer wordt geactiveerd. Het mechanisme om dit te doen kan afhangen van hoe je je computer opschort - ik gebruik de tuxonice kernel en om zoiets te doen heb ik een richtlijn zoals

Unmount /mnt/sshfs

in /etc/hibernate/common.conf.


2
2018-05-09 23:16