SSHFS : mises en place et montage

Présentation rapide

SSHFS permet d’utiliser un serveur ssh afin de monter des dossiers distants disponibles dans le système de fichier grâce à fuse. Il ne nécessite côté serveur que openssh-server et côté client fuse openssh-client sshfs et éventuellement tor. N’hésitez pas à signaler toute erreur/faute.

Ce tuto est une mise en forme de ces deux-ci :

Liens

Configuration SSHFS de base client serveur

Note : Les paquets “openssh-client” et “fuse-utils” sont requis, mais il sont déjà installés par défaut

client

Il faut disposer d’un serveur ssh focntionnel

serveur

Installer sshfs

sudo apt update && sudo apt install sshfs # debian
sudo pacman -S sshfs  # archlinux/manjaro

Test rapide

Sur le système client, créer un répertoire dans lequel va être monté le système de fichiers :

mkdir /home/utilisateur/Test

Monter un répertoire distant (ici ~/Public):

sshfs utilisateur@ip_distante:/home/utilisateur/Public /home/utilisateur/Test

Le mot de passe de l’utilisateur est alors demandé.

Ouvrir l gestionnaire de fichiers pour accèder à vos fichiers distants.

Enfin, penser à démonter :

fusermount -u /home/utilisateur/Test

SSHFS avec clés et port différent

sshfs -oIdentityFile=<clé privée> utilisateur@domaine.tld:<dossier distant> <dossier local> -C -p <port si différent de 22>

Configurer le serveur SSH

Installez les pré-requis

sudo apt-get install tor openssh-server

Créez un utilisateur dédié

sudo adduser userCommunSFTP

Générez de nouvelles clés de sécurité pour l’utilisateur précédemment créé

su userCommunSFTP
ssh-keygen -t ed25519 -o -a 1666
ssh-keygen -t rsa -b 4096 -o -a 1666

Configurer le(s) client(s) GNU/Linux

Installez les pré-requis

sudo apt-get install openssh-client sshfs fuse

Si vous ne l’avez jamais fait depuis votre installation, générez de nouvelles clés

ssh-keygen -t ed25519 -o -a 16669
ssh-keygen -t rsa -b 4096 -o -a 16669

-o -a 100 : permet de faire boucler l’algorithme 100 fois -b 4096 : précise qu’on veut une clé à 4096 bits (au début des années 2k la France interdisait plus de 126 bit ;) ) -t rsa : on utilise l’algorithme RSA -t ed25519 : on utilise l’algorithme EdDSA

Exportez votre clé publique sur le serveur

ssh-copy-id -i ~/.ssh/id_ed25519.pub userCommunSFTP@adresseServerSSH

Ajoutez votre utilisateur à la liste des utilisateurs autorisés à utiliser fuse

sudo adduser $USER fuse
  • Note : remplacez $USER par l’utilisateur de votre choix (par défaut $USER = votre utilisateur courant (celui qui a ouvert la session sur votre machine)). Sur Raspberry Pi cette commande peut échouer sans que cela ne pose problème.

Autoriser les autres utilisateurs à monter un dossier avec fusermount

sudo nano /etc/fuse.conf
  • Décommentez (enlevez le # devant) user_allow_other puis tapez CTRL+X pour sauver et quitter.

Pour effectuer le montage SSHFS au démarrage il est fort possible que la machine passe par root.

Connectez-vous en root (admin)

sudo su

Générez une paire de clés solide pour root

ssh-keygen -t rsa -b 4096 -o -a 16666
ssh-keygen -t ed25519 -o -a 16666
  • La deuxième (ed25519) ne fonctionne pas sur Raspberry Pi

Exportez la clé publique de root sur la machine distante

ssh-copy-id -i /root/.ssh/id_rsa.pub userCommunSFTP@adresseServerSSH

Testez si l’ajout a bien fonctionné (ne doit pas demander de mot de passe)

ssh userCommunSFTP@adresseServerSSH

Quittez root

exit

Montage au démarrage sur le(s) client(s) via fstab et hostname fixe

Installez les pré-requis

sudo apt-get install openssh-client

Créer le point de montage local (adaptez à vos envies)

sudo mkdir /media/monPointDeMontageLocal

Accorder les bons droits à notre point de montage

  • Spécifiez les propriétaires
sudo chown root:$USER -R /media/monPointDeMontageLocal
  • Note : $USER = votre utilisateur courant par défaut, changez si besoin

  • Spécifiez aussi les droits d’accès des propriétaires

sudo chmod 770 -R /media/monPointDeMontageLocal
  • Note : si vous souhaitez que le montage soit accessible à tous vos utilisateurs systèmes remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir chmod )

Éditez le fichier /etc/fstab (CTRL+X pour sauver&quitter)

sudo nano /etc/fstab

Ajoutez le montage afin de le monter au boot

userCommunSFTP@adresseServerSSH:/home/userCommunSFTP/                /media/monPointDeMontageLocal          fuse.sshfs           port=22,user,noatime,reconnect,_netdev,nofail,allow_other     0 0
  • Note : :/dossier/distant/ n’est pas obligatoire ; nofail permet d’empêcher le boot de crasher si le montage ne réussit pas, _netdev ordonne d’attendre que le réseau soit fonctionnel avant d’effectuer le montage; allow_other autorise les autres utilisateurs à monter le dossier. Ajoutez noauto si vous voulez que le montage ne s’effectue qu’à la demande et non au démarrage de la machine.

Testez votre montage

sudo mount /media/monPointDeMontageLocal

Montage au démarrage sur le(s) client(s) via script DIY compatible cross-canal (LAN, WAN, TOR)

Installez les pré-requis

sudo apt-get install openssh-client tor

Créer le point de montage local (adaptez-le à vos envies)

sudo mkdir /media/monPointDeMontageLocal

Accorder les bons droits à notre point de montage

  • Spécifiez les propriétaires
sudo chown root:$USER -R /media/monPointDeMontageLocal
  • Note : $USER = votre utilisateur courant par défaut, changez si besoin

  • Spécifiez aussi les droits d’accès des propriétaires

sudo chmod 770 -R /media/monPointDeMontageLocal
  • Note : si vous souhaitez que le montage soit accessible à tous vos utilisateurs système remplacez 770 par 774 pour lecture uniquement ou 777 s’ils (tous les utilisateurs) peuvent avoir les mêmes droits que votre utilisateur principal sur ce point de montage. ( voir chmod )

Créez le script

sudo nano /opt/scripts/mountSSHFS.sh

Collez le code suivant en l’adaptant

#!/bin/bash
#licence WTFPL - script infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=68&t=339&p=893#p893
#github : https://github.com/voxdemonix/divers-script/blob/master/mountSSHFS_crosscanal.sh
#work on raspbian, ubuntu, debian and possibly Arch


if [ ! "$SUDO_USER" ]; then
echo "i need root => $0"
exit 0
fi
sleep 60 # petit délai d'attente afin que le réseau soit prêt


IpServerLocale="192.168.1.42" # server IP LAN
AdresseServerOnion="blablablablabla1.onion" # tor hidden service OR Hostname WAN
MacServerLocale="00:00:00:00:00:00" #l'adresse mac du serveur SSH (tapez ifconfig dans un terminal sur votre server pour la voir)
UserRemoteForSsh="user_sur_server" # l'utilisateur à utiliser côté serveur ( /!\ n'utilisez jamais root !)
port="22" # le port sur le server
monPointDeMontageLocal="/media/monPointDeMontageLocal"
monPointDeMontageDistant="/home/user_sur_serveur/"

umount $monPointDeMontageLocal -f >> /dev/null 2>&1
ping $IpServerLocale -c 1 >> /dev/null 2>&1
macRecover=$(arp -n | grep -i -o $MacServerLocale)

if [ "$macRecover" == "$MacServerLocale" ]; then
   sshfs -o allow_other -o reconnect -o ServerAliveInterval=15 $UserRemoteForSsh@$IpServerLocale:$monPointDeMontageDistant $monPointDeMontageLocal -p $port -C
else
   sshfs -o allow_other -o reconnect -o ServerAliveInterval=15 $UserRemoteForSsh@$AdresseServerOnion:$monPointDeMontageDistant $monPointDeMontageLocal -p $port -C
fi
  • IpServerLocale=”192.168.1.42” => l’adresse IP LAN de votre serveur
  • AdresseServerOnion=”blablablablabla1.onion” => l’hostname de votre serveur. Au choix un Tor Hidden Service, une IP WAn ou un Hostname WAN (exemple.com)
  • MacServerLocale=”00:00:00:00:00:00” => l’adresse MAC de votre server (tapez ifconfig sur votre serveur pour la voir)
  • UserRemoteForSsh=”user_sur_server” => utilisateur sur le serveur SSH à utiliser pour la connexion
  • port=”22” => le port d’écoute du serveur ssh (par défaut 22)
  • monPointDeMontageLocal=”/media/monPointDeMontageLocal” => où rendre disponible le montage sur votre client
  • monPointDeMontageDistant=”/home/user_sur_server/” => Le dossier sur le serveur à partir du quel effectuer le montage

Rendez le script exécutable

sudo chmod +x /opt/scripts/mountSSHFS.sh

Lancez-le au boot en éditant /etc/rc.local

sudo nano /etc/rc.local
  • Et ajoutez la ligne suivante avant “exit 0” ###
sudo /opt/scripts/mountSSHFS.sh

Rendez compatible votre client SSH avec le réseau tor

sudo nano /etc/ssh/ssh_config
  • Et collez les lignes suivantes puis tapez CTRL+X pour sauver&quitter
    Host *.onion
       ProxyCommand nc -xlocalhost:9050 -X5 %h %p

Testez votre montage

sudo /opt/scripts/mountSSHFS.sh