SSHFS: montare una risorsa remota sfruttando FUSE ed SSH: differenze tra le versioni
Wtf (discussione | contributi) |
(verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian) |
||
(20 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{Versioni compatibili}} | {{File_System | ||
|precedente=Samba:_guida_estesa | |||
|successivo=Guida_alla_formattazione_dei_dischi_con_fdisk | |||
}} | |||
{{SSH | |||
|precedente=SFTP: SSH File Transfer Protocol | |||
}} | |||
{{Versioni compatibili|Jessie|Stretch|Buster}} | |||
== Introduzione == | == 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). | 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). | ||
'''<code>Sshfs</code>''' permette di superare questo problema in un modo semplice e pulito: montando una directory mediante [ | '''<code>Sshfs</code>''' permette di superare questo problema in un modo semplice e pulito: montando una directory mediante FUSE<sup>[[#Collegamenti esterni|[1]]]</sup>, usando il protocollo [[SSH]]. | ||
== Installazione == | == Installazione == | ||
Il pacchetto sshfs e le utility per gestire FUSE sono già presenti in Debian, quindi l'installazione si riduce ad un semplice: | Il pacchetto <code>sshfs</code> e le utility per gestire FUSE sono già presenti in Debian, quindi l'installazione si riduce ad un semplice: | ||
<pre> | <pre> | ||
# apt | # apt install sshfs | ||
</pre> | </pre> | ||
(da eseguirsi con [[privilegi di amministrazione]]) | |||
== Configurazione == | == Configurazione == | ||
=== | === Permettere l'esecuzione di sshfs ad altri utenti === | ||
A partire da Debian 8 ([[Jessie]]) non è necessario modificare niente, in quanto di default tutti gli utenti possono utilizzare il modulo <code>fuse</code> se è installato; né ha più alcuna importanza l'appartenenza al gruppo ''fuse'', in precedenza richiesta. | |||
è necessario, | |||
< | |||
</ | |||
== Utilizzo e Test == | == Utilizzo e Test == | ||
L'utilizzo è semplice: | L'utilizzo è semplice: | ||
'''sshfs''' [user@]host''':'''[dir] mountpoint [options] | |||
anche se spesso si può semplicemente usare senza opzioni: | |||
<pre> | <pre> | ||
$ sshfs user@host:/dir/to/mount /mnt/sshdir | $ sshfs user@host:/dir/to/mount /mnt/sshdir | ||
</pre> | </pre> | ||
dove | dove | ||
; <code>user</code>: è l'utente della macchina remota, se omesso verrà utilizzato l'username dell'utente che lancia il comando | ; <code>user</code>: è l'utente della macchina remota, se omesso verrà utilizzato l'username dell'utente che lancia il comando; | ||
; <code>host</code>: è l'indirizzo IP o l'URL a cui la macchina remota risponde; | ; <code>host</code>: è l'indirizzo IP o l'URL a cui la macchina remota risponde; | ||
; <code>/dir/to/mount</code>: è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: <code>''./path/to/dir''</code>); | ; <code>/dir/to/mount</code>: è il percorso assoluto della directory da montare, (è possibile anche utilizzare un percorso relativo a partire dalla directory home dell'utente: <code>''./path/to/dir''</code>; o perfino tralasciare questo argomento, per indicare la home, ma sempre digitando '''<code>:</code>'''); | ||
; <code>/mnt/sshdir</code>: rappresenta il punto di mount; | ; <code>/mnt/sshdir</code>: rappresenta il punto di mount; questa directory deve appartenere all'utente, che deve avervi accesso anche in scrittura; | ||
per controllare la riuscita del comando, si può analizzare l'output del comando: <pre> | per controllare la riuscita del comando, si può analizzare l'output del comando: | ||
$ | <pre> | ||
$ findmnt | |||
</pre> | </pre> | ||
Per quanto riguarda lo smontaggio (unmounting) il comando è il seguente: | |||
<pre> | |||
$ fusermount -u /mnt/sshdir | |||
</pre> | |||
per le opzioni consultare il file | |||
<pre> | <pre> | ||
$ | $ man sshfs | ||
</pre> | </pre> | ||
tra le più comuni: | |||
'''-p''' ''PORT'' equivalente a <code>-o port=PORT</code> | |||
'''-C''' equivalente a <code>-o compression=yes</code> | |||
'''-F''' ''ssh_configfile'' specifica un file di configurazione alternativo | |||
'''-1''' equivalente a <code>-o ssh_protocol=1</code> | |||
Si noti che per dichiarare opzioni di SSH è sufficiente digitare <code>'''-o''' ''variabile_sshd'''''='''''valore''</code>, ad esempio per specificare la propria chiave privata è sufficiente aggiungere <code>-o IdentityFile=/percorso/chiave</code> (ASSOLUTO!): | |||
<pre>$ sshfs user@host:/dir/to/mount /mnt/sshdir -o IdentityFile=/percorso/chiave -p numero_porta</pre> | |||
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 corrispondenza 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 | |||
<pre># sshfs user@host:/dir/to/mount /mnt/sshdir -o idmap=user,uid=1001</pre> | |||
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). | |||
==== Accesso ad altri utenti ==== | |||
Per permettere l'accesso del file system anche ad altri utenti, indipendentemente dai permessi associati ai file, è possibile mediante l'opzione: <code>-o allow_other</code> | |||
Affinché abbia effetto però bisogna anche configurare '''fuse''', ossia che <code>/etc/fuse.conf</code> contenga, non commentata, la riga <code>user_allow_other</code>, che di default è disabilitata per ragioni di sicurezza. Per maggiori informazioni si rimanda al manuale (<code>man fuse</code>). | |||
È pertanto '''sconsigliato''' utilizzare tale impostazione, se si può fare altrimenti. | |||
== | == FAQ ed Errori Frequenti == | ||
=== failed to open <code>/dev/fuse</code>: No such file or directory === | === failed to open <code>/dev/fuse</code>: No such file or directory === | ||
L'errore è dovuto alla mancanza del modulo del kernel relativo a ''fusefs''. È necessario compilarlo come modulo o staticamente | 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: | ||
<pre> | |||
# modprobe fuse | # modprobe fuse | ||
</pre> | </pre> | ||
Riga 74: | Riga 92: | ||
* appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code> | * appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code> | ||
=== | === Collegamenti esterni === | ||
[1] [http://fuse.sourceforge.net/ FUSE] | |||
{{Autori | |||
|Autore = [[Utente:MaXeR|MaXeR]] | |||
|Verificata_da = | |||
: [[Utente:Wtf|Wtf]] 16:58, 9 ott 2013 (CEST) | |||
: [[Utente:mm-barabba|mm.barabba]] | |||
: [[Utente:HAL 9000|HAL 9000]] 21:01, 18 ago 2019 (CEST) | |||
| Numero_revisori = 3 | |||
}} | |||
[[Categoria:Filesystem]] | [[Categoria:Filesystem]] | ||
[[Categoria:Condivisione_risorse]] | [[Categoria:Condivisione_risorse]] | ||
[[Categoria:Crittografia]] | [[Categoria:Crittografia]] | ||
[[Categoria:SSH server e amministrazione remota]] | [[Categoria:SSH server e amministrazione remota]] |
Versione attuale delle 19:01, 18 ago 2019
|
|
Versioni Compatibili Debian 8 "jessie" Debian 9 "stretch" Debian 10 "buster" |
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[1], 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 install sshfs
(da eseguirsi con privilegi di amministrazione)
Configurazione
Permettere l'esecuzione di sshfs ad altri utenti
A partire da Debian 8 (Jessie) non è necessario modificare niente, in quanto di default tutti gli utenti possono utilizzare il modulo fuse
se è installato; né ha più alcuna importanza l'appartenenza al gruppo fuse, in precedenza richiesta.
Utilizzo e Test
L'utilizzo è semplice:
sshfs [user@]host:[dir] mountpoint [options]
anche se spesso si può semplicemente usare senza opzioni:
$ 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;
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
; o perfino tralasciare questo argomento, per indicare la home, ma sempre digitando:
); /mnt/sshdir
- rappresenta il punto di mount; questa directory deve appartenere all'utente, che deve avervi accesso anche in scrittura;
per controllare la riuscita del comando, si può analizzare l'output del comando:
$ findmnt
Per quanto riguarda lo smontaggio (unmounting) 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 equivalente a-o compression=yes
-F ssh_configfile specifica un file di configurazione alternativo -1 equivalente a-o ssh_protocol=1
Si noti che per dichiarare opzioni di SSH è sufficiente digitare -o variabile_sshd=valore
, ad esempio per specificare la propria chiave privata è sufficiente aggiungere -o IdentityFile=/percorso/chiave
(ASSOLUTO!):
$ sshfs user@host:/dir/to/mount /mnt/sshdir -o IdentityFile=/percorso/chiave -p numero_porta
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 corrispondenza 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 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).
Accesso ad altri utenti
Per permettere l'accesso del file system anche ad altri utenti, indipendentemente dai permessi associati ai file, è possibile mediante l'opzione: -o allow_other
Affinché abbia effetto però bisogna anche configurare fuse, ossia che /etc/fuse.conf
contenga, non commentata, la riga user_allow_other
, che di default è disabilitata per ragioni di sicurezza. Per maggiori informazioni si rimanda al manuale (man fuse
).
È pertanto sconsigliato utilizzare tale impostazione, se si può fare altrimenti.
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
Collegamenti esterni
[1] FUSE
Guida scritta da: MaXeR | Debianized 80% |
Estesa da: | |
Verificata da:
| |
Verificare ed estendere la guida | Cos'è una guida Debianized |