Ceci est une ancienne révision du document !
SSH Filesystem
Article en cours d'élaboration commentaires et discussion ici.
A quoi ça sert ?
SshFS sert à monter sur son système de fichier, un autre système de fichier distant, à travers une connexion ssh, le tout avec des droits utilisateur. L'avantage est de manipuler les données distantes avec n'importe quel gestionnaire de fichier (Nautilus, Konqueror, ROX, ou même la ligne de commande), ce qui est bien plus pratique que la commande scp couplée avec ssh. SshFS apporte ce qui pouvait manquer à certains utilisateurs Windows qui utilisaient WinSCP.
Installation
Tout d'abord, il vous faudra installer et configurer FUSE, dont dépend SshFS.
Ensuite, un simple :
sudo apt-get install sshfs
(ou pour les allergiques de la console: apt://sshfs ) Il faut veiller à ce que les utilisateurs potentiels de sshfs fassent bien partie du groupe fuse.
Il est probable, surtout si vous utilisez l'authentification ssh par certificat, que vous deviez re-démarrer la machine…
Vous obtiendrez l'erreur failed to open /dev/fuse: Permission denied si les points précédents ne sont pas vérifiés.
Voilà, vous pouvez utiliser SshFS !
Utilisation en mode Console
Rien de plus simple maintenant :
~$ mkdir tmp ~$ sshfs toto@lecole.fr:Document/Blagues tmp
Pour démonter, vérifier que rien n'accède au point de montage (fichier ouvert ou gestionnaire de fichier), et effectuer la commande :
~$ fusermount -u tmp
Remarque: Pour monter un disque dans un répertoire autre que le home afin de faire une sauvegarde du home par exemple il faut tout d'abord créer ce dossier puis autoriser son accès (en remplaçant your-username par votre login):
sudo mkdir /mnt/backup sudo chown your-username /mnt/backup
Le reste de la procédure est identique
Fusauto: Il est possible de monter/démonter en une seule commande simple, voir la documentation.
fusauto /point/de/montage
Utilisation via /etc/fstab
si vous montez souvent les mêmes répertoires, il peut être sympa de les entrer dans la fstab :
~$ sudo mkdir /mnt/mon_rep ~$ sudo chmod 0777 /mnt/mon_rep ~$ sudo vi /etc/fstab
et il faut y rajouter la ligne
sshfs#user@machine:/dossier/distant /mnt/mon_rep fuse user,noauto,noatime 0 0
Autofs
Objectifs
Le montage manuel ou par fstab a plusieurs inconvénients. Le principal, c'est qu'il n'est pas toujours possible de rendre le montage automatique : mais si lors du montage vous n'êtes pas encore connecté (en wifi par exemple), et bien le montage ne se fait pas, et il faut effectuer le montage manuellement. Et dans tous les cas, le démontage aussi. Un autre inconvénient, moins important, est que même si vous n'utilisez pas les dossiers montés, ils restent montés et consomment des ressources.
autofs permet de résoudre ces 2 problèmes.
Installation
Configuration
Contrairement au montage NFS par autofs, SSHFS a besoin d'une authentification, et cette authentification doit se faire "automatiquement". Pour cela, il faut utiliser le système de clés publiques/privées pour l'authentification ssh, et utiliser l'user-agent (par ssh-add) si vous avez défini une passphrase. Pour cela reportez-vous à la page ssh.
Le problème avec autofs, c'est qu'il s'exécute en root. Il faut donc créer une paire de clés publiques/privées pour l'utilisateur root sur le client:
sudo ssh-keygen -t dsa
et l'autoriser sur le serveur en rajoutant le contenu /root/.ssh/id_dsa.pub du poste client dans ~/.ssh/authorized_keys du poste serveur, pour chaque compte utilisateur auquel il sera possible de se connecter.
Maintenant que les problèmes de connexions ssh sont résolus, supprimez (ou commentez) dans /etc/fstab les montages que vous voulez gérer par autofs (si vous en aviez écrit auparavant).
Ensuite, éditez /etc/auto.master, pour y ajouter la ligne :
/net /etc/auto.sshfs --timeout=30,--ghost
L'option ghost permet de toujours afficher les dossiers, même lorsqu'ils ne sont pas montés. Il ne reste plus qu'à double-cliquer dessus dans le navigateur pour les monter automatiquement.
Créez alors un fichier /etc/auto.sshfs :
mondossier -fstype=fuse,port=22,rw,allow_other :sshfs\#votrelogin@192.168.0.1\:/media/share
Le montage se fera alors dans /net/mondossier (qu'il faut créer auparavant ), et pointera vers la machine 192.168.0.1 sur le répertoire /media/share. Vous pouvez dans ce même fichier écrire plusieurs lignes pour chacun de vos points de montage.
Il ne reste plus qu'à lancer le serveur :
sudo /etc/init.d/autofs start
Si vous avez défini une passphrase pour la clé de l'utilisateur root, vous devrez enregistrer auparavant (une seule fois pour chaque session) cette clé dans l'user-agent, par ssh-add.
Malheureusement, après avoir entré une clé dans ssh-add, il faut relancer le serveur autofs:
sudo /etc/init.d/autofs restart
Si vous avez une autre solution, éditer cette page et contactez-moi par jabber (rom1v@jabber.fr) svp :)
Utilisation en mode Graphique
1er Méthode : fusauto
À exploiter directement depuis votre gestionnaire de fichier, voir la documentation.
2nd Méthode : Xsshfs
xsshfs est un petit programme écrit en perl/glade offrant une interface graphique à sshfs
Quelques fonctions de ce programme :
- Monter des dossier sshfs
- Démonter des dossier sshfs
- Enregistrer vos connexions préférées
Installation
Deux possibilités :
- Suivre les instructions énoncées sur le site du projet
- Ouvrir un terminal et taper directement la commande :
wget http://xsshfs.zici.fr/files/xsshfs_current.deb ; sudo dpkg -i xsshfs_current.deb ; sudo apt-get install -f ; rm xsshfs_current.deb
Utilisation
- Ouvrez un terminal et taper la commande
xsshfs
- Allez dans le menu Application / Internet (ou Réseau) / xsshfs
- Créez un raccourci en utilisant comme commande: xsshfs (dans le nouveau paquet cela est fait automatiquement!)
3ème Méthode : sshfs-dialog.sh
Création et explication de sshfs-dialog.sh
Voici un petit programme écrit en GtkDialog, il faut donc l'installer. De plus, il faut pouvoir renseigner le mot de passe d'une manière sécurisée, pour cela il y a ssh-askpass-gnome : sudo apt-get install gtkdialog ssh-askpass-gnome
Le programme est un script, ouvrez un éditeur de texte :
gedit sshfs-dialog.sh
Puis y coller le code suivant : bas de page
ne pas oublier de le rendre exécutable :
chmod u+x sshfs-dialog.sh
Exécutez le script directement dans votre gestionnaire de fichiers ou dans une console (le mot de passe sera demandé dans la console), et vous obtiendrez une fenêtre nécessitant quelques renseignements comme :
- l' adresse du serveur
- le numéro de port
- le nom de l'utilisateur distant
- le point de montage distant (par défaut, le HOME de l'utilisateur distant)
- le nom du point de montage
Une fois tout renseigné, cliquez sur mount, et un répertoire du nom du point de montage doit se créer, le mot de passe de l'utilisateur distant vous est demandé, et votre connexion montée sur le système de fichier !!
Quand vous avez fini, quittez le répertoire monté, et faîtes Umount Il est possible de sauvegarder la configuration en appuyant sur Save
Pour recharger la configuration, il faut passer un fichier .essh en paramètre du script (en faisant un glisser-déposer avec un gestionnaire de fichiers).
Suggestion d'utilisation
Créez quelque part dans votre arborescence, un répertoire SSH ( /home/toto/Network/SSH ).
Déplacez le script dans ce répertoire.
Remplissez la fenêtre normalement, testez la connexion, et sauvegardez.
Vous obtenez des fichiers .essh, comme par exemple "toto@portable.essh" "tata@gouv.fr.essh".
Glisser/déposer le fichier toto@portable.essh sur sshfs-dialog.sh, et la fenêtre s'ouvre directement avec les informations renseignées.
Vous pouvez aussi cliquer-droit sur le fichier *.essh puis propriètés – > onglet "ouvrir avec" –> ajouter et là vous sélectionnez l'emplacement du script sshfs-dialog.sh grâce à la commande "parcourir". Ainsi vous pourrez créer des lanceurs sur le bureau. Le script s'exécutera maintenant automatiquement en cliquant sur un fichier *.essh.
Code de ssh-dialog.sh
#! /bin/bash export SSH_ASKPASS=/usr/lib/openssh/gnome-ssh-askpass export DIR=$PWD if [ $1 ] ; then export DIR=`dirname $1` while read ligne ; do first=1 val="" for mot in $ligne ; do if [ $first -eq 1 ] ; then var=$mot first=0 else val=$val$mot" " fi done export $var="$val" done < $1 fi if [ -z "$PORT" ] ; then export PORT=22 fi if [ -z "$DISTUSER" ] ; then export DISTUSER=$USER fi if [ -z "$MOUNT" ] ; then export MOUNT=$DISTUSER$SERVEUR fi export MAIN_DIALOG=' <vbox> <hbox> <text><label>Serveur:</label></text> <entry> <input>echo $SERVEUR</input> <variable>SERVEUR</variable> </entry> </hbox> <hbox> <text><label>Port:</label></text> <entry> <input>echo $PORT</input> <variable>PORT</variable> </entry> </hbox> <hbox> <text><label>User:</label></text> <entry> <input>echo $DISTUSER</input> <variable>DISTUSER</variable> </entry> </hbox> <hbox> <text><label>Remote Point:</label></text> <entry> <input>echo $REMOTE</input> <variable>REMOTE</variable> </entry> </hbox> <hbox> <text><label>Mount Name:</label></text> <entry> <input>echo $MOUNT</input> <variable>MOUNT</variable> </entry> </hbox> <hbox> <button> <label>Term</label> <action>x-terminal-emulator -e ssh -p $PORT $DISTUSER@$SERVEUR</action> </button> <button> <label>Mount</label> <action>fusermount -u $DIR/$MOUNT</action> <action>rmdir $DIR/$MOUNT</action> <action>mkdir $DIR/$MOUNT</action> <action>sshfs $DISTUSER@$SERVEUR:$REMOTE $DIR/$MOUNT -p $PORT</action> </button> <button> <label>Umount</label> <action>fusermount -u $DIR/$MOUNT</action> <action>rmdir $DIR/$MOUNT</action> </button> <button> <label>Save</label> <action>echo SERVEUR $SERVEUR | tee $DIR/$MOUNT.essh</action> <action>echo PORT $PORT | tee -a $DIR/$MOUNT.essh</action> <action>echo DISTUSER $DISTUSER | tee -a $DIR/$MOUNT.essh</action> <action>echo REMOTE $REMOTE | tee -a $DIR/$MOUNT.essh</action> <action>echo MOUNT $MOUNT | tee -a $DIR/$MOUNT.essh</action> </button> </hbox> </vbox> ' gtkdialog --program=MAIN_DIALOG
4ème Méthode : Fusible
Fusible est une interface graphique pour tous points de montage FUSE. Un plugin pour SSHFS est prévu et permettra d'accéder à toutes les fonctionnalités et options de SSHFS et de FUSE.