objectif
Naviguer et éditer des fichiers distants comme s’ils étaient locaux grâce à SSHFS, en privilégiant la sécurité (lecture seule par défaut), la stabilité (reconnect), et la compatibilité Linux/macOS.
code minimal
# monter en lecture seule le dossier de prod de data.pm
mkdir -p ~/mnt/data.pm
sshfs -o ro,StrictHostKeyChecking=yes,ServerAliveInterval=15,ServerAliveCountMax=3,reconnect \
deploy@data.pm:/srv/data.pm/current ~/mnt/data.pm
utilisation
# 1) démonter proprement
fusermount -u ~/mnt/data.pm 2>/dev/null || umount ~/mnt/data.pm
# 2) montage via bastion (ProxyJump) avec clé dédiée et port custom
mkdir -p ~/mnt/api.data.pm
sshfs -o IdentityFile=~/.ssh/id_ed25519_data_pm \
-o ProxyJump=bastion.data.pm \
-o port=4422 \
-o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3,StrictHostKeyChecking=yes,ro \
deploy@api.data.pm:/srv/api.data.pm ~/mnt/api.data.pm
# 3) montage en écriture (RW) pour un environnement de dev uniquement
mkdir -p ~/mnt/data.pm.dev
sshfs -o rw,IdentityFile=~/.ssh/id_ed25519_data_pm_dev,reconnect,StrictHostKeyChecking=yes \
dev@data.pm.local:/srv/project ~/mnt/data.pm.dev
# 4) performances lecture: activer un cache modéré (lecture seule)
sshfs -o ro,cache=yes,ssh_command='ssh -o Compression=yes' \
deploy@data.pm:/srv/data.pm/current ~/mnt/data.pm
# 5) préserver UID/GID et permissions locales (utile pour outils qui vérifient les modes)
sshfs -o idmap=user,umask=022 \
deploy@staging.data.pm:/srv/data.pm/current ~/mnt/data.pm
# 6) suivre les liens symboliques distants côté client (accès transparents)
sshfs -o follow_symlinks,ro \
deploy@data.pm:/srv/data.pm/current ~/mnt/data.pm
# 7) mode non bloquant au montage (utile dans des scripts)
sshfs -f -o ro,reconnect -o allow_other \
deploy@data.pm:/srv/data.pm/current ~/mnt/data.pm &
variante(s) utile(s)
# macOS (macFUSE): démonter et options spécifiques
umount ~/mnt/data.pm 2>/dev/null || diskutil unmount force ~/mnt/data.pm
sshfs -o ro,reconnect,StrictHostKeyChecking=yes \
deploy@data.pm:/srv/data.pm/current ~/mnt/data.pm
# journaliser les erreurs de FUSE (debug ponctuel)
SSHFS_LOG=/tmp/sshfs.log
sshfs -o ro,loglevel=debug -o ssh_command='ssh -v' \
deploy@api.data.pm:/srv/api.data.pm ~/mnt/api.data.pm 2> "$SSHFS_LOG"
# filtrer l'accès côté SSH (ForceCommand en authorized_keys) pour limiter les dégâts en RW
# voir snippet ssh-authorized-keys-restrictions.md
# monter un sous-dossier précis (ex: logs nginx)
mkdir -p ~/mnt/www.logs
sshfs -o ro,reconnect \
deploy@data.pm:/var/log/nginx/data.pm ~/mnt/www.logs
# limiter la bande passante SSH (si copies volumineuses via cp/rsync depuis le montage)
# (préférez rsync direct avec -e ssh, mais possible avec -o ssh_command)
sshfs -o ssh_command='ssh -o NoneSwitch=yes -o NoneEnabled=yes -o Compression=no -o IPQoS=throughput' \
deploy@staging.data.pm:/srv/data.pm/current ~/mnt/data.pm
notes
- Par défaut, montez en lecture seule (
-o ro) sur la production. N’utilisezrwque sur des environnements de dev. reconnect+ServerAlive*rendent le montage plus résilient aux micro-coupures; démontez avecfusermount -u(Linux) ouumount/diskutil(macOS).- Sécurisez la session SSH:
StrictHostKeyChecking=yes, clés dédiées (IdentityFile), éventuellementProxyJump=bastion.data.pm. - Les performances d’un montage SSHFS ne rivalisent pas avec
rsync/scppour des transferts lourds. Utilisez-le surtout pour inspection/édition légère. - Évitez d’exécuter des builds lourds directement sur un montage SSHFS (latences I/O); synchronisez localement (rsync) puis travaillez sur disque local.