SSHFS (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de SSHFS. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

SSHFS est un client de système de fichiers basé sur FUSE pour monter des répertoires distants via une connexion Secure Shell.

Note: Ce projet a été archivé par ses développeurs et n'est plus développé. Une alternative possible est la fonction mount de rclone.

Installation

Installez le paquet sshfs.

Astuce:
  • 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
.....
Note: Le répertoire chroot doit appartenir à root, sinon vous ne pourrez pas vous connecter.

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.

Note: N'oubliez pas que le montage automatique est effectué par l'utilisateur root, vous ne pouvez donc pas utiliser les hôtes configurés dans .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).
Note: Après avoir modifié /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 :

  1. 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
  2. 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 par
    sshfs#user@host:/mnt/server/directory ... fuse ...
    au lieu d'utiliser la syntaxe
    user@host:/mnt/server/directory ... fuse.sshfs ... x-systemd, ...
  3. 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
  4. 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.
  5. 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
  6. 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 dans sshfs -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.
Note: Lorsque vous fournissez plus d'une option pour sshfs, elles doivent être séparées par des virgules. Par exemple : 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
Note: Ici, \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