Le système de fichiers virtuel http://fuse.sourceforge.net/sshfs.html basé sur http://fuse.sourceforge.net permet de monter un répertoire à travers SSH. Voici quelques astuces qui me sont utiles.
- je crée un répertoire $HOME/mnt et les sous-répertoires des points de montage
- je place mes points de montage dans /etc/fstab, par exemple :
sshfs#cbenz@hostname.com:/home/cbenz /home/cbenz/mnt/hostname fuse defaults,user,uid=cbenz,allow_other 0 0
On peut aussi placer l'option follow_symlinks, qui suivra les liens côté distant.
- pour monter et démonter :
$ mount ~/mnt/hostname $ fusermount -u ~/mnt/hostname
Maintenant qu'on a mis en place les bases, on se rend bien vite compte que certaines commandes sont longues lorsqu'elles manipulent un grand nombre de fichiers/répertoires. Par exemple, si on utilise git, la commande «git status» sera très longue (30sec pour un petit projet) alors qu'en local elle prend <1sec. Solution : un petit script python que j'ai nommé «sshdo», qui exécute la commande côté serveur, en se plaçant dans le répertoire correspondant au répertoire local en cours.
#!/usr/bin/env python import os import sys if len(sys.argv) < 2: print 'please enter a command' sys.exit(-1) command = ' '.join(sys.argv[1:]) remote_hostname = os.path.abspath('.').replace(os.environ['HOME']+'/mnt/', '').split('/')[0] remote_path = os.path.abspath('.').replace(os.environ['HOME']+'/mnt/%s/'%remote_hostname, '') os.system('ssh %s "cd %s; %s"' % (remote_hostname, remote_path, command))
Utilisation :
$ sshdo git status
Par contre il faut respecter cette arborescence ~/mnt/hostname pour que ça fonctionne.


