SSHFS: montare una risorsa remota sfruttando FUSE ed SSH
Introduzione
Spesso può essere necessario lavorare direttamente su un filesystem remoto (si pensi, ad esempio, alla webroot di un sito o alla home del proprio portatile).
Sshfs
permette di superare questo problema in un modo semplice e pulito: montando una directory mediante FUSE, usando il protocollo SSH.
Installazione
Il pacchetto sshfs e le utility per gestire FUSE son già presenti in Debian, quindi l'installazione si riduce ad un semplice:
# apt-get install sshfs fuse-utils
Per quanto riguarda il kernel, normalmente è presente il modulo fuse. Se non è presente è necessaria la ricompilazione del kernel.
Il modulo da attivare si trova in: File systems ---> Filesystem in Userspace support.
Configurazione
Creazione del punto di mount
Prima di tutto è necessario creare un punto di montaggio in cui montare la risorsa di rete (ovviamente ognuno è liberissimo di utilizzare la directory che vuole):
# mkdir /mnt/sshdir
è necessario, inoltre, impostare l'utente che utilizzerà questa directory come owner:
# chown username /mnt/sshdir
Permessi utenti
È possibile permettere l'utilizzo di sshfs anche agli utenti normali, seguendo i seguenti passaggi:
# chgrp fuse /usr/bin/fusermount # chmod u+s /usr/bin/fusermount # adduser nomeutente fuse
in questo modo permettiamo l'utilizzo del comando fusermount agli utenti appartenenti al gruppo fuse, e aggiungiamo l'utente che utilizzerà sshfs al gruppo fuse.
Per rendere effettiva l'aggiunta al gruppo è necessario effettuare un logout-login.
Utilizzo e Test
L'utilizzo è semplice:
$ sshfs user@host:/dir/to/mount /mnt/sshdir
dove
- user
- è l'utente della macchina remota (se omesso verrà utilizzato l'username dell'utente che lancia il comando (root, in questo caso)
- host
- è l'indirizzo IP o l'URL a cui la macchina remota risponde
- /dir/to/mount
- è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: ./path/to/dir)
- /mnt/sshdir
- rappresenta il punto di mount
per controllare la riuscita del comando, si può analizzare l'output del comando:
$ mount
Per quanto riguarda lo smontaggio (umounting) il comando è il seguente:
$ fusermount -u /mnt/sshdir
Faq ed Errori Frequenti
failed to open /dev/fuse: No such file or directory
L'errore è dovuto alla mancanza del modulo del kernel relativo a fusefs. È necessario compilarlo come modulo o staticamente (nei kernel pacchettizzati Debian è presente, ed è caricabile con un
# modprobe fuse
mountpoint is not empty
Se si cerca di montare una risorsa in un mountpoint contenente già dei file, può apparire il seguente errore:
fusermount: mountpoint is not empty fusermount: if you are sure this is safe, use the 'nonempty' mount option
Le soluzioni sono:
- usare un mountpoint libero (consigliata)
- appendere, dopo il comando sshfs l'opzione -o nonempty
fusermount: mount failed: Invalid argument
È possibile che la versione dei pacchetti fuse-utils, libfuse2, sshfs-fuse non sia sufficientemente aggiornata rispetto alla versione del kernel in uso. Si legga in particolare la discussione apparsa su queste pagine nel forum [[1]]: la soluzione prospettata è quella di sostituire e aggiornare i pacchetti a tutt'oggi disponibili (per la sarge: fuse-utils 2.2.1-4, libfuse2 2.2.1-4, sshfs 1.1-1 ) con le versioni a disposizione su http://www.backports.org/ (fuse-utils 2.5.3-1bpo1, libfuse2 2.5.3-1bpo1, sshfs_1.6-0bpo1) seguendo le relative istruzioni.