← retour aux snippets

sshfs: monter un dossier distant en sécurité

Monter un répertoire distant via SSH (FUSE) en lecture seule ou RW, avec ProxyJump, clés et options sûres.

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’utilisez rw que sur des environnements de dev.
  • reconnect + ServerAlive* rendent le montage plus résilient aux micro-coupures; démontez avec fusermount -u (Linux) ou umount/diskutil (macOS).
  • Sécurisez la session SSH: StrictHostKeyChecking=yes, clés dédiées (IdentityFile), éventuellement ProxyJump=bastion.data.pm.
  • Les performances d’un montage SSHFS ne rivalisent pas avec rsync/scp pour 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.