SSHFS (Français)
SSHFS est un client de système de fichiers basé sur FUSE pour monter des répertoires distants via une connexion Secure Shell.
Installation
- Si vous avez souvent besoin de monter des systèmes de fichiers sshfs, vous pouvez utiliser un assistant sshfs, tel que qsshfsAUR, sftpman, sshmntAUR ou fmount.py.
- Vous pouvez vouloir utiliser Google Authenticator qui fournit une sécurité supplémentaire comme dans l'authentification en deux étapes.
- Les clés SSH peuvent être utilisées pour remplacer l'authentification traditionnelle par mot de passe.
Montage
Pour pouvoir monter un répertoire, l'utilisateur SSH doit pouvoir y accéder. Appelez sshfs pour monter un répertoire distant :
$ sshfs [user@]host :[dir] mountpoint [options]
Par exemple :
$ sshfs myuser@mycomputer:/remote/path /local/path -C -p 9876
Ici, -p 9876
spécifie le numéro de port et -C
active la compression. Pour plus d'options, consultez la section #Options.
S'il n'est pas spécifié, le chemin distant prend par défaut le répertoire d'origine de l'utilisateur distant. Les noms d'utilisateurs et les options par défaut peuvent être prédéfinis sur une base hôte par hôte dans ~/.ssh/config
pour simplifier l'utilisation de sshfs. Pour plus d'informations, consultez OpenSSH (Français)#Utilisation du client.
SSH demandera le mot de passe, si nécessaire. Si vous ne voulez pas taper le mot de passe plusieurs fois par jour, consultez SSH keys.
Démontage
Pour démonter le système distant :
$ fusermount3 -u mountpoint
Exemple :
$ fusermount3 -u /local/path
Options
sshfs peut convertir automatiquement les identifiants des utilisateurs locaux et distants. Utilisez l'option idmap=user
pour convertir l'UID de l'utilisateur qui se connecte en l'utilisateur distant myuser
(le GID reste inchangé) :
$ sshfs myuser@mycomputer:/remote/path /local/path -o idmap=user
Si vous avez besoin de plus de contrôle sur la traduction des UID et GID, consultez les options idmap=file
, uidfile
et gidfile
.
Une liste complète des options se trouve dans sshfs(1).
Chrooting
Vous pouvez vouloir restreindre un utilisateur spécifique à un répertoire spécifique sur le système distant. Ceci peut être fait en éditant /etc/ssh/sshd_config
:
/etc/ssh/sshd_config
..... Match User someuser ChrootDirectory /chroot/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no .....
Consultez également SFTP chroot. Pour plus d'informations, consultez la page de manuel sshd_config(5) pour Match
, ChrootDirectory
et ForceCommand
.
Montage automatique
Le montage automatique peut se faire au démarrage ou à la demande (lors de l'accès au répertoire). Dans les deux cas, la configuration se fait dans le fichier fstab.
.ssh/config
de votre utilisateur normal.
Pour laisser l'utilisateur root utiliser une clé SSH d'un utilisateur normal, spécifiez son chemin complet dans l'option IdentityFile
.
Surtout, utilisez chaque montage sshfs au moins une fois manuellement en root sur la machine cliente afin que la signature de l'hôte soit ajoutée au fichier /root/.ssh/known_hosts
du client. Cela peut également être fait manuellement en ajoutant une ou plusieurs clés publiques d'hôte du serveur SSH (les fichiers /etc/ssh/ssh_host_*key.pub
) à /root/.ssh/known_hosts
.
À la demande
Avec systemd, le montage à la demande est possible en utilisant les entrées /etc/fstab
.
Exemple :
user@host : /remote/path /local/path fuse.sshfs noauto,x-systemd.automount,_netdev,users,idmap=user,IdentityFile=/home/user/.ssh/id_rsa,allow_other,reconnect 0 0
Les options de montage importantes ici sont noauto,x-systemd.automount,_netdev.
- noauto indique qu'il ne faut pas monter au démarrage.
- x-systemd.automount fait la magie à la demande
- _netdev indique qu'il s'agit d'un périphérique réseau et non d'un périphérique de type bloc (sans cela, des erreurs "No such device" peuvent se produire).
/etc/fstab
, rechargez la configuration de systemd et les services requis, qui peuvent être trouvés en exécutant systemctl list-unit-files --type automount
. Au démarrage
Exemple d'utilisation de sshfs pour monter un système de fichiers distant via /etc/fstab
.
user@host : /remote/path /local/path fuse.sshfs defaults,_netdev 0 0
Prenons par exemple la ligne fstab suivante
llib@192.168.1.200:/home/llib/FAH /media/FAH2 fuse.sshfs defaults,_netdev 0 0
Ce qui précède fonctionnera automatiquement si vous utilisez une clé SSH pour l'utilisateur. Consultez Using SSH Keys.
Si vous voulez utiliser sshfs avec plusieurs utilisateurs, ajoutez l'option suivante :
user@domain.org:/home/user /media/user fuse.sshfs defaults, allow_other,_netdev 0 0
Encore une fois, il est important de définir l'option de montage _netdev pour s'assurer que le réseau est disponible avant d'essayer de monter.
Accès utilisateur sécurisé
Lors du montage automatique via fstab, le système de fichiers sera généralement monté par root. Par défaut, cela produit des résultats indésirables si vous souhaitez accéder en tant qu'utilisateur ordinaire et limiter l'accès aux autres utilisateurs.
Un exemple de configuration de point de montage :
user@host : /remote/path /local/path fuse.sshfs noauto,x-systemd.automount,_netdev,user,idmap=user,follow_symlinks,identityfile=/home/user/.ssh/id_rsa,allow_other,default_permissions,uid=USER_ID_N,gid=USER_GID_N 0 0
Résumé des options pertinentes :
- allow_other - Autorise d'autres utilisateurs que le monteur (i.e. root) à accéder au partage.
- default_permissions - Autorise le noyau à vérifier les permissions, c'est-à-dire à utiliser les permissions réelles sur le système de fichiers distant. Cela permet d'interdire l'accès à tout le monde autrement accordé par allow_other.
- uid, gid - définit la propriété déclarée des fichiers à des valeurs données ; uid est l'ID numérique de votre utilisateur, gid est l'ID numérique du groupe de votre utilisateur.
Dépannage
Checklist
Lisez d'abord OpenSSH (Français)#Checklist. Les autres points à vérifier sont :
- Votre login SSH envoie-t-il des informations supplémentaires depuis le fichier
/etc/issue
du serveur, par exemple ? Cela peut perturber SSHFS. Vous devriez désactiver temporairement le fichier/etc/issue
du serveur :$ mv /etc/issue /etc/issue.orig
- Gardez à l'esprit que la plupart des articles de dépannage liés à SSH que vous trouverez sur le web ne sont pas liés à systemd. Souvent, les définitions de
/etc/fstab
commencent par erreur parsshfs#user@host:/mnt/server/directory ... fuse ...
au lieu d'utiliser la syntaxeuser@host:/mnt/server/directory ... fuse.sshfs ... x-systemd, ...
- Vérifiez que le propriétaire du répertoire source du serveur et de son contenu appartient à l'utilisateur du serveur.
$ chown -R user_s : /mnt/servers/directory
- L'ID utilisateur du serveur peut être différent de celui du client. Évidemment, les deux noms d'utilisateur doivent être identiques. Il suffit de s'occuper des ID utilisateur du client. SSHFS traduira l'UID pour vous avec les options de montage suivantes :
uid=USER_C_ID,gid=GROUP_C_ID.
- Vérifiez que le point de montage cible du client (directory) appartient à l'utilisateur du client. Ce répertoire doit avoir le même ID utilisateur que celui défini dans les options de montage de SSHFS.
$ chown -R user_c : /mnt/client/directory
- Vérifiez que le point de montage (directory) du client est vide. Par défaut, vous ne pouvez pas monter des répertoires SSHFS sur des répertoires non vides.
Réinitialisation de la connexion par le pair
- Si vous essayez d'accéder au système distant avec un nom d'hôte, essayez d'utiliser son adresse IP, car il peut s'agir d'un problème de résolution de nom de domaine. Assurez-vous d'éditer
/etc/hosts
avec les détails du serveur. - Assurez-vous que votre utilisateur peut se connecter au serveur (surtout si vous utilisez
AllowUsers
). - Assurez-vous que
Subsystem sftp /usr/lib/ssh/sftp-server
est activé dans/etc/ssh/sshd_config
sur le système distant. - Si vous utilisez un nom de clé autre que celui par défaut et que vous le transmettez sous la forme
-i .ssh/my_key
, cela ne fonctionnera pas. Vous devez utiliser-o IdentityFile=/home/user/.ssh/my_key
, avec le chemin complet de la clé. - Si votre
/root/.ssh/config/
est un lien symbolique, vous obtiendrez également cette erreur. Consultez ce sujet sur les erreurs de serveur. - Ajout de l'option
sshfs_debug
. (comme danssshfs -o sshfs_debug user@server ...
) peut aider à résoudre le problème. - Si cela ne révèle rien d'utile, vous pouvez également essayer d'ajouter l'option
debug
. - Si vous essayez d'accéder par sshfs à un routeur fonctionnant sous DD-WRT ou autre, il existe une solution ici. (Notez que l'option
-osftp_server=/opt/libexec/sftp-server
peut être utilisée pour la commande sshfs au lieu de patcher dropbear). - Si vous ne consultez ce message qu'au démarrage, il se peut que systemd tente d'effectuer un montage avant qu'une connexion réseau ne soit disponible. L'activation du wait-online service approprié pour votre gestionnaire de réseau résout ce problème.
- Ancien fil de discussion du forum : sshfs : Connexion réinitialisée par un pair.
sshfs -o sshfs_debug,IdentityFile=/path/to/key user@server ...
).L'hôte distant s'est déconnecté
Si vous recevez ce message directement après avoir essayé d'utiliser sshfs :
- Assurez-vous d'abord que la machine distante a installé sftp ! Sinon, cela ne fonctionnera pas.
- Ensuite, vérifiez que le chemin du
Subsystem sftp
dans/etc/ssh/sshd_config
sur la machine distante est valide.
Problèmes de montage fstab
Pour obtenir une sortie de débogage verbeuse, ajoutez ce qui suit aux options de montage :
ssh_command=ssh\040-vv,sshfs_debug,debug
\040
représente un espace que fstab utilise pour séparer les champs.Pour pouvoir exécuter mount -av
et consulter la sortie de débogage, supprimez les éléments suivants :
noauto,x-systemd.automount
Certains répertoires sont vides
Par défaut, sshfs ne prend pas en charge les liens symboliques. Si ces répertoires étaient des liens symboliques, utilisez :
$ sshfs user@host:/remote/path /local/path -o follow_symlinks
Fichiers non rafraîchis
Si vous consultez du vieux contenu sur le serveur distant, pensez à utiliser l'option dir_cache=no
:
$ sshfs user@host:/remote/path /local/path -o dir_cache=no
Transfert limité sur un réseau rapide
Si vous observez un transfert inférieur aux capacités de votre réseau et une utilisation élevée du CPU sur la partie d'où les fichiers sont copiés, désactivez la compression (supprimez l'option -C
ou définissez -o compression=no
).
Voir aussi
- How to mount chrooted SSH filesystem, avec une attention particulière aux questions de propriétaires et de permissions.