Le montage SSHFS qui survit à la déconnexion

57

J'utilise des montages SSHFS de mon ordinateur portable vers un serveur central.

De toute évidence, le montage SSHFS est interrompu après une longue déconnexion (par exemple, pendant la suspension), ce qui entraîne l'expiration du délai de connexion SSH sous-jacent.

Existe-t-il un moyen d'obtenir que les montages SSHFS survivent à des déconnexions durables (> 5 min) ou même à une nouvelle connexion avec une adresse IP différente?

bene
la source

Réponses:

63

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

La combinaison ServerAliveInterval=15,ServerAliveCountMax=3provoque les erreurs d'E / S à sortir après une minute de panne de réseau. Ceci est important mais en grande partie non documenté. Si l' ServerAliveIntervaloption est laissée par défaut (donc sans la vérification vivante), les processus qui subissent un blocage d'E / S semblent s'endormir indéfiniment, même après que sshfs ait été reconnectédité. Je considère cela comme un comportement inutile.

En d'autres termes, ce qui se passe -o reconnectsans assigner ServerAliveIntervalest que n'importe quelle E / S réussira ou bloquera indéfiniment l'application si le SSH se reconnecte en dessous. En conséquence, une application typique devient entièrement bloquée. Si vous souhaitez autoriser les E / S à renvoyer une erreur et à reprendre l'application, vous avez besoin de ServerAliveInterval=1ou d'une version supérieure.

Le ServerAliveCountMax=3est le défaut quand même, mais j'aime bien le spécifier pour la lisibilité.

Kubanczyk
la source
Cela l'a fait pour moi. Aussi, vous pouvez utiliser un intervalle plus court, autant que cela ne cause pas trop de problèmes et rend le tout plus réactif.
Manux
Je n'ai pas lu la documentation, mais j'ai vu une autre solution dire "ServerAliveCountMax = 0" signifie que les tentatives se poursuivront indéfiniment. Je suppose que votre solution lui donne 3 tentatives après chaque échec?
PJ Brunet
@PJBrunet man 5 ssh_configpour plus de détails, mais l'essentiel est que ssh envoie quelque chose comme un ping 'garder en vie' toutes les 15 secondes pour s'assurer que les ordinateurs répondent toujours l'un à l'autre. Si trois pings consécutifs échouent (45 secondes), reconnectez-vous.
Wyatt8740
@ Wyatt8740 J'ai étudié cela davantage et lu la documentation, je pense que cela ServerAliveCountMax=3a un sens différent. En cas d'échec, il essaiera de se reconnecter trois fois de plus, puis abandonnera. À un moment donné, les tentatives sont inutiles, mais cela dépend de l'application. Là encore, je pense que la page de manuel pourrait être plus spécifique, il y a différentes façons d’interpréter le libellé de l’OMI. FWIW mon problème spécifique a disparu après le passage à ProtonVPN. Je pense que cela vaut également la peine de vérifier la configuration SSH sur le client et le serveur, ils ont des options séparées, donc tout ce dont vous avez besoin est-o reconnect
PJ Brunet
1
Cela devrait être la réponse acceptée.
Fl0v0
52

Merci pour les conseils de autossh et autofs.

Cependant, pour mon objectif direct, j'ai trouvé une solution beaucoup plus simple qui n'a pas été documentée aussi bien:

sshfs -o reconnect server:/path/to/mount
bene
la source
Sucré! Cela me donne vraiment envie de trier authenticate-on-write: serverfault.com/q/379728/96905
Jeff Burdges
12

Autossh reconnecte automatiquement les sessions ssh lorsqu'il constate que ssh est mort ou a cessé de passer du trafic. Comme il ne s'agit que de ssh automatisé, il fonctionnera à partir d'adresses IP différentes et en suspension (même si l'ordinateur portable se réveille sur un réseau local différent).

kband
la source
Peut-être que Mosh est encore mieux pour une session SSH interactive.
Martin Ueding
@MartinUeding J'ai regardé Mosh mais a) ne fonctionne pas avec sshfs b) il semble que vous deviez également l'installer sur le serveur, ce qui le rend moins attrayant, IMO.
PJ Brunet
9

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é. Lorsque 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, là où plusieurs autres.

Zoredache
la source
2

Je soupçonne que non, 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, sans que vous puissiez le remplacer. Même si vous le pouviez, si vous ne repreniez jamais la connexion, le serveur resterait en suspens et, avec le temps, cela pourrait entraîner un gaspillage important de ressources du serveur.

Une meilleure technique, je pense, consiste à démonter le système de fichiers avant de suspendre votre ordinateur et à le remonter à son réveil. Le mécanisme pour ce faire peut dépendre de la manière dont vous suspendez votre ordinateur. J'utilise le noyau tuxonice et, pour ce faire, j'ai une directive comme

Unmount /mnt/sshfs

dans /etc/hibernate/common.conf.

David Z
la source
0

La réponse de kubanczyk est excellente. J'ai eu un problème avec le gel de toute l'interface à cause de sshfs trop gourmands, maintenant pour une connexion facile démarrée par un script qui se reconnecte quand un ordinateur portable est ouvert et qui ne se bloque pas quand la connexion devient plus lente, vous pouvez utiliser un script bash pas très sécurisé, mais pratique pour de nombreux projets web par exemple):

#!/bin/bash
echo PWD | sshfs USER@SERVER:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
Timofey Bugaevsky
la source