web-dev-qa-db-fra.com

Monture SSHFS qui survit à la déconnexion

J'utilise SSHFS se monte de mon ordinateur portable sur un serveur central.

De toute évidence, le montage SSHFS est rompu après une déconnexion plus longue (par exemple pendant la suspension), car la connexion SSH sous-jacente a expiré.

Existe-t-il un moyen d'obtenir des montages SSHFS survivant à des déconnexions durables (> 5 min) ou même une recomposition avec une IP différente?

60
bene

Merci pour les conseils de autossh et autofs.

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

sshfs -o reconnect server:/path/to/mount
54
bene

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

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

En d'autres termes, ce qui se passe le -o reconnect sans affecter ServerAliveInterval signifie que toute E/S réussira ou suspendra l'application indéfiniment si le ssh se reconnecte en dessous. Une application typique devient ainsi entièrement bloquée. Si vous souhaitez autoriser les E/S à renvoyer une erreur et reprendre l'application, vous avez besoin de ServerAliveInterval=1 ou plus grand.

Le ServerAliveCountMax=3 est de toute façon la valeur par défaut, mais j'aime le spécifier pour la lisibilité.

65
kubanczyk

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

12
kband

Une chose que vous pourriez 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é. Quand rien ne se passe sur le système de fichiers, il est démonté.

Voici un howto que j'ai trouvé sur google pour y parvenir, là où plusieurs autres.

9
Zoredache

Je soupçonne qu'il n'y en a pas, 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, et vous ne pourrez pas remplacer cela. Même si vous le pouviez, si vous ne reprenez jamais la connexion, le serveur resterait bloqué, et avec le temps, cela pourrait entraîner un gaspillage important de ressources serveur.

Une meilleure technique, je pense, est de démonter le système de fichiers avant de suspendre votre ordinateur et de le remonter lorsque l'ordinateur se réveille à nouveau. Le mécanisme pour le faire peut dépendre exactement de la façon dont vous suspendez votre ordinateur - j'utilise le noyau tuxonice et pour faire quelque chose comme ça, j'ai une directive comme

Unmount /mnt/sshfs

dans /etc/hibernate/common.conf.

2
David Z

Le réponse de kubanczyk est super. 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 lorsque l'ordinateur portable est ouvert et qui ne se fige pas lorsque la connexion devient plus lente, vous pouvez utiliser un script bash comme ça (peut-être 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
1