Connecter avec FUSE des dossiers distants accessibles via OpenSSH sur des postes Ubuntu
Sommaire
Pré-requis
Serveur
Serveur OpenSSH, sous UNIX de préférence...
Postes clients
Machines sous Ubuntu GNU/Linux, fonctionnant avec Gnome en interface graphique.
Préparer le terrain à FUSE
Pour permettre de monter facilement un dossier, il faut créer le script fusauto sur votre système. L'emplacement /usr/local/bin/fusauto est à privilégier. Voici le script :
#! /usr/bin/env python # coding: utf-8 # # fusauto # auto mount directory with fuse by reading a config file # # Copyright (C) Nicolas Albert <nicolas_albert_85@yahoo.fr> # # Version 0.0.1 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA import sys, os def runconf(conf, path): file = open(conf, "r") act = {} for line in file.readlines(): if not line.startswith('#'): part = line[:-1].partition('=') act[part[0]] = part[2] file.close() if 'bin' in act: if not 'from' in act: act['from']='none' if not 'opt' in act: act['opt']= os.system("%s %s %s -o nonempty %s"%(act['bin'], act['from'], path, act['opt'])) def getfuses(): mtab = open("/etc/mtab", "r") fuses =[ line for line in mtab.readlines() if line.split()[2] == "fuse" ] mtab.close() return fuses def alreadymount(path): for fuse in getfuses(): fd = fuse.split()[1] if fd == path or fd == os.getcwd()+'/'+path: return True return False def umount(path): os.system("/bin/fusermount -u "+path) if __name__ == "__main__": if len(sys.argv) == 2 and os.path.isdir(sys.argv[1]): if alreadymount(sys.argv[1]): umount(sys.argv[1]) else: conf = sys.argv[1]+'/fusauto.conf' if os.path.isfile(conf): runconf(conf, sys.argv[1]) else: print conf,"is required" else: print "One directory is required"
Créez également un script automatisant le démontage de volumes FUSE, dans /usr/local/bin/fuserumount :
#/bin/bash fusermount -u $1
N'oubliez pas de rendre exécutable vos fichiers nouvellement créé :
chmod +x /usr/local/bin/fusauto /usr/local/bin/fuserumount
Préparer OpenSSH côté serveur
Sur vos postes clients, générez simplement des clés SSH avec la commande suivante, en laissant toutes les réponses aux questions qui vous seront posées vierges :
ssh-keygen
Ensuite, recopier le contenu du fichier .ssh/id_rsa.pub généré dans le fichier .ssh/authorized_keys du le compte qui sera utilisé sur le serveur pour accéder aux fichiers.
Tentez ensuite une connexion directe via SSH pour valider votre manipulation :
ssh [utilisateur@]SERVEUR
Monter aisément un dossier distant
Créez deux liens symboliques :
ln -s /usr/local/bin/fusauto ~/.gnome2/nautilus-scripts/connecter ln -s /usr/local/bin/fuserumount ~/.gnome2/nautilus-scripts/déconnecter
Créez le point de montage (dans votre répertoire personnel par exemple) :
mkdir ~/MONTAGE
Ajoutez la configuration de votre accès distant dans votre répertoire, à travers le fichier ~/MONTAGE/fusauto.conf :
# fusauto config file # lines start with # are commentaries # process must be run (must exist) bin=/usr/bin/sshfs # remote folder (default : none) from=SERVEUR:/home # fuse options (default : ) opt=-o follow_symlinks,transform_symlinks,workaround=rename,idmap=user
N'oubliez pas de changer la ligne "remote folder" pour l'adapter à vos besoins (serveur et dossier distant).
Automatiser le process
Pour automatiser le montage de votre dossier distant, il est possible de l'ajouter dans les "Applications au démarrage" de votre session. De manière plus stricte, créez un fichier .config/autostart/fusauto.desktop avec pour contenu :
[Desktop Entry] Type=Application Name=Connexion serveur Exec=/usr/local/bin/fusauto ~/MONTAGE Icon=system-run Comment=
Il restera à voir comment démonter automatiquement ce dossier à la déconnexion de la session.