SSHFS: montare una risorsa remota sfruttando FUSE ed SSH
|
Versioni Compatibili Tutte le versioni supportate di Debian |
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 sono 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
Inoltre, se si vuole permettere l'accesso anche ad altri utenti (indipendentemente dai permessi associati ai file) aggiungere l'opzione: -o allow_other
Permettere l'esecuzione di sshfs ad altri utenti
Per impostazione predefinita l'utilizzo di sshfs richiede privilegi di root, tuttavia è possibile permettere l'utilizzo di sshfs
anche agli utenti normali.
Seguire 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] mountpoint [options]
anche se spesso si può semplicemente usare con :
$ 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
per le opzioni consultare il file
$man sshfs
tra le più comuni :
-p PORT equivalente a '-o port=PORT' -C equivalenta a '-o compression=yes' -F ssh_configfile specifica un file di configurazione alternativo -1 equivalente a '-o ssh_protocol=1'
Se il mount avviene con successo è possibile usare il file-manager preferito per poter gestire in lettura e scrittura la nuova directory montata , che sia esso MC, dolphin, PCmanfm o altro.
Utenti e gruppi proprietari
Per impostazione predefinita sshfs adotta un'associazione "diretta" tra UID/GID della macchina remota e quella locale, il che significa per esempio che se il proprietario di un certo file sulla macchina remota è l'utente con UID 1002 anche in locale la proprietà del file sarà attribuita all'utente avente UID 1002. Potrebbero dunque sorgere problemi di permessi se su macchina remota e locale non sussiste un esatta corripondenza utenti/uid e gruppi/gid. Un modo veloce per superare tale problema è specificare lo UID/GID durante il comando per montare le risorse remote, per esempio
# sshfs user@host:/dir/to/mount /mnt/sshdir -o allow_other,idmap=user,uid=1001
fa sì che all'utenza usata per connettersi al server remoto sia associata in locale l'utenza avente uid 1001. Se si ha la necessità di fissare la corrispondenza di più utenze/gruppi è possibile creare degli appositi file di mappatura (si veda il manuale di sshfs).
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 questa pagina nel forum.
La soluzione prospettata è quella di sostituire e aggiornare i pacchetti a tutt'oggi disponibili (per 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.
Guida scritta da: MaXeR | Debianized 40% |
Estesa da: | |
Verificata da:
| |
Verificare ed estendere la guida | Cos'è una guida Debianized |