SSHFS: montare una risorsa remota sfruttando FUSE ed SSH: differenze tra le versioni

verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian
(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 [http://fuse.sourceforge.net/ FUSE], usando il protocollo [[SSH]].
'''<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-get install sshfs fuse-utils
# apt install sshfs
</pre>
</pre>
 
(da eseguirsi con [[privilegi di amministrazione]])
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 ==
== Configurazione ==
=== Creazione del punto di mount ===
=== Permettere l'esecuzione di sshfs ad altri utenti ===
Prima di tutto è necessario creare un [[mountpoint | punto di montaggio]] in cui montare la risorsa di rete (ovviamente ognuno è liberissimo di utilizzare la directory che vuole):
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.
<pre>
# mkdir /mnt/sshdir
</pre>
è necessario, inoltre, impostare l'utente che utilizzerà questa directory come ''[[owner]]'':
<pre>
# chown username /mnt/sshdir
</pre>
 
Inoltre, se si vuole permettere l'accesso anche ad altri utenti (indipendentamente dai permessi associati ai file) aggiungere l'opzione: ''-o allow_other''
 
=== Permessi utenti ===
È possibile permettere l'utilizzo di sshfs anche agli utenti normali, seguendo i seguenti passaggi:
<pre>
# chgrp fuse /usr/bin/fusermount
# chmod u+s /usr/bin/fusermount
# adduser nomeutente fuse
</pre>
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 ==
== 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 (root, in questo caso);
; <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:
$ mount
<pre>
$ findmnt
</pre>
</pre>


Per quanto riguarda lo smontaggio (unmounting) il comando è il seguente:
<pre>
$ fusermount -u /mnt/sshdir
</pre>


Per quanto riguarda lo smontaggio (umounting) il comando è il seguente:
per le opzioni consultare il file
<pre>
<pre>
$ fusermount -u /mnt/sshdir
$ 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 ==
== 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 (nei kernel pacchettizzati Debian è presente, ed è caricabile con un <pre>
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>


=== fusermount: mount failed: Invalid argument ===
=== Collegamenti esterni ===
È possibile che la versione dei pacchetti fuse-utils, libfuse2, sshfs-fuse non sia sufficientemente aggiornata rispetto alla versione del kernel in uso.
[1] [http://fuse.sourceforge.net/ FUSE]
Si legga in particolare la discussione apparsa su [http://forum.debianizzati.org/viewtopic.php?f=19&t=21639 questa pagina] nel forum.
{{Autori
 
|Autore = [[Utente:MaXeR|MaXeR]]
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/ http://www.backports.org/] (fuse-utils 2.5.3-1bpo1, libfuse2 2.5.3-1bpo1, sshfs_1.6-0bpo1) seguendo le relative [http://www.backports.org/dokuwiki/doku.php?id=instructions istruzioni].
|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
}}


{{
Autori
| Autore = [[Utente:MaXeR|MaXeR]]
}}
[[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]]
3 581

contributi