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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(verificata per Stretch e Buster, rimosse informazioni relative a versioni obsolete di Debian)
 
(39 versioni intermedie di 8 utenti non mostrate)
Riga 1: Riga 1:
{{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).


Questo HOWTO mostrer� come installare i driver '''eagle-adsl''' su Debian GNU/Linux.
'''<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]].
 
Questi driver supportano i seguenti modem:
* [[Modem adsl Telindus ND220|Telindus ND220]]
* [[Modem adsl Sagem Fast 800|Sagem Fast 800]]
* [[Modem adsl Aethra Starmodem|Aethra Starmodem]]: solo con chipset ADI
 
Vedere le rispettive pagine per ulteriori informazioni.
 
I driver funzionano molto bene, soprattutto nelle ultime versioni. Ricordatevi soltanto che quando riavviate dovrete staccare per qualche secondo il modem per evitare problemi di sincronia (e quindi lunghe attese al boot).
 
==Pacchetti da installare==
Questo � il passaggio pi� difficile dato che dobbiamo installare i pacchetti senza disporre di una connessione ad internet. Ci sono due possibili strade da seguire, a seconda di cosa avete a disposizione:
 
# Effettuare una connessione ad internet provvisoria, ad esempio tramite scheda di rete. Io ad esempio disponevo di un secondo pc sul quale il modem era gi� installato � ho fatto in modo di condividere la connessione ad internet (vedere: [[Modem_adsl_Telinus_ND220#Condividere la connessione|Condividere la connessione]]). Alternativamente potreste andare a casa di un amico che dispone di connessione ad internet tramite scheda di rete ethernet, o ancora, farvi prestare un modem adsl ethernet. Una volta connessi, per�, l'installazione dei pacchetti e di tutte le dipendenze diventa una cosa banalissima.
# Scaricare i pacchetti manualmente, tramite un'altro sistema o pc connesso ad internet. Questa strada � pi� macchinosa perch� non � facile trovare e scaricare tutte le dipendenze (dipende molto da cosa si � gi� installato). Per risolvere parzialmente il problema si potrebbe usare '''apt-zip''' (vedere: [[Apt-zip: aggiornamenti senza una connessione veloce]]) ma anche questo programma si deve prima installare. Questa strada si dovrebbe usare come ultima spiaggia.
 
Ok, supposto che in un modo o nell'altro abbiate una connesione ad internet, i pacchetti da installare sono in primo luogo i driver del modem:
 
* eagle-usb-data
* eagle-usb-utils
 
Durante l'installazione di '''eagle-usb-utils''' verranno richieste:
 
* Il vostro provider internet
* Nome utente e password per la connessione ad internet
* Quando avviare automaticamente la connessione: all'avvio del sistema, quando il modem viene collegato al pc oppure mai (avvio manuale).
* Se usare i [[DNS]] forniti da telecom oppure usare dei [[DNS]] statici impostati manualmente (veder dopo:  [[Modem_adsl_Telinus_ND220#Impostare i DNS|Impostare i DNS]])
 
Se volete riconfigurare il pacchetto in un secondo momento baster� usare il comando:


== Installazione ==
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>
# dpkg-reconfigure eagle-usb-utils
# apt install sshfs
</pre>
</pre>
(da eseguirsi con [[privilegi di amministrazione]])


Ora (e qu� viene il grosso) dovremo installare tutta una serie di pacchetti per poter compilare il modulo del kernel '''eagle_usb''' che serve per gestire il modem:
== Configurazione ==
 
=== Permettere l'esecuzione di sshfs ad altri utenti ===
* eagle-usb-module-source
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.
* module-assistant
* kernel-package
* libc6-dev
 
Se avete una connessione ad internet, baster� lanciare '''module-assistant''' e questi permetter� di installare gli eventuali altri pacchetti mancanti, di compilare il modulo mettendolo in un pacchetto, ed infine di installare il pacchetto del modulo.
 
Se non avete invece una connessione ad internet provvisoria sullo stesso sistema dovrete scaricare oltre ai precedenti pacchetti con tutte le loro dipendenze, anche gli header del kernel corrente ed eventuali altri pacchetti qualora module-assistant fallisse a compilare il modulo.
 
==Compilare il modulo del kernel==
Come detto il modulo del kernel necessario per gestire il modem � '''eagle_usb''' che portroppo non � incluso in nessun kernel ufficiale debian.
 
Per compilare i moduli debian fornisce un comodo tool '''module-assistant'''. Basta lanciarlo:


== Utilizzo e Test ==
L'utilizzo è semplice:
'''sshfs''' [user@]host''':'''[dir] mountpoint [options]
anche se spesso si può semplicemente usare senza opzioni:
<pre>
<pre>
# module-assistant
$ sshfs user@host:/dir/to/mount /mnt/sshdir
</pre>
</pre>
dove
; <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>/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; questa directory deve appartenere all'utente, che deve avervi accesso anche in scrittura;


e ci verra presentata una interfaccia che permette di:
per controllare la riuscita del comando, si può analizzare l'output del comando:
 
* Preparare il sistema installando eventualemte gli header del kernel corrente
* Scegliere il modulo da compilare e scaricare automaticamente i sorgenti
* Compilare il modulo
* Installare il pacchetto
 
Una volta installato il modulo si potr� fare partire la connessione con:
 
<pre>
<pre>
# adslstart
$ findmnt
</pre>
</pre>


==Impostare i DNS==
Per quanto riguarda lo smontaggio (unmounting) il comando è il seguente:
Nel mio caso i [[DNS]] mandati da Telecom Italia, in fase di connessione, risultano lentissimi. Per vedere se una connessione � lenta a causa dei [[DNS]] si pu� usare un comando del tipo:
 
<pre>
<pre>
nslookup www.google.it
$ fusermount -u /mnt/sshdir
</pre>
</pre>


Tipicamente si dovrebbe avere una risposta nel giro di un secondo o anche meno. Se la risposta arriva dopo diversi secondi allora i [[DNS]] sono troppo lenti e conviene impostarne degli altri.
per le opzioni consultare il file
 
Per impostare i [[DNS]] basta inserire in cima a '''/etc/resolv.conf''':
 
<pre>
<pre>
nameserver 151.99.125.2
$ man sshfs
nameserver 151.99.125.3
</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>


Dove 151.99.125.2 e 151.99.125.3 sono gli indirizzi dei [[DNS]] che ho trovato essere molto pi� veloci nel mio caso. A questo punto la velocit� del comando nslookup dovrebbe essere migliorata parecchio (e anche l'apertura della pagine internet di conseguenza). Se i [[DNS]] sono ancora lenti cercatene degli altri fino a quando non ne trovate di abbastanza veloci.
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>
Si possono anche aggiungere delle ulteriori opzioni:
 
<pre>
options rotate
options timeout 1
</pre>


che servono per mandare alternativamente le richieste all'uno o all'altro [[DNS]] e per impostare ad 1 secondo il timeout da attendere prima di rifare la richiesta sull'altro [[DNS]].
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.


Ora dobbiamo fare in modo che il file /etc/resolv.conf non venga pi� sovrascritto quando si effettua la connessione.
=== Utenti e gruppi proprietari ===
A tal scopo basta riconfigurare il pacchetto '''eagle-usb-utils''':


<pre>
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
# dpkg-reconfigure eagle-usb-utils
</pre>


e scegliere di non usare i [[DNS]] forniti dal provider.
<pre># sshfs user@host:/dir/to/mount /mnt/sshdir -o idmap=user,uid=1001</pre>


A questo punto il file /etc/resolv.conf non dovrebbe venire pi� sovrascritto. Per maggior sicurezza, tuttavia, consiglio di conservare una copia del resolv.conf funzionante in un posto sicuro (ad es. in /root) in modo da poterlo ripristinare facilmente all'occorrenza con un semplice cp.
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).


== Connettersi e Disconnettersi Manualmente ==
==== Accesso ad altri utenti ====


Per connettersi manualmente basta usare il seguente comando:
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>


<pre>
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>).
# adslstart
</pre>


Invece per disconnettersi da internet:
È 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 ===
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>
<pre>
# adslstop
# modprobe fuse
</pre>
</pre>


==Condividere la connessione==
=== mountpoint is not empty ===
Se avete pi� di un computer, potreste avere la necessit� di collegarvi contemporaneamente ad internet con pi� computer.
Se si cerca di montare una risorsa in un [[mountpoint]] contenente già dei file, può apparire il seguente errore:
 
<pre>fusermount: mountpoint is not empty
Se ad esempio avete due computer, potrete collegarne uno a internet tramite il modem usb e fare si che l'altro condivida la connessione. Per far ci� ogni pc deve essere dotato di una normalissima scheda di rete ethernet e deve essere usato un cavetto cross (incrociato) per connetter i due pc.
fusermount: if you are sure this is safe, use the 'nonempty' mount option</pre>
Le soluzioni sono:
* usare un mountpoint libero (consigliata)
* appendere, dopo il comando <code>''sshfs''</code> l'opzione <code>''-o nonempty''</code>


Se avete pi� di due pc dovrete usare un switch per collegarli tutti tramite scheda di rete.
=== Collegamenti esterni ===
 
[1] [http://fuse.sourceforge.net/ FUSE]
Fatto ci� non vi resta che seguire questa guida su come condividere la connessione ad internet:
{{Autori
 
|Autore = [[Utente:MaXeR|MaXeR]]
* [[Condividere la connessione a internet]]
|Verificata_da =
 
: [[Utente:Wtf|Wtf]] 16:58, 9 ott 2013 (CEST)
== Kernel 2.6.10 o superiori ==
: [[Utente:mm-barabba|mm.barabba]]
 
: [[Utente:HAL 9000|HAL 9000]] 21:01, 18 ago 2019 (CEST)
A partirte dal kernel 2.6.10 i package '''eagle-usb-data''' e '''eagle-usb-utils''' sono sostituibili con '''ueagle-atm''' e '''ueagle-utils'''.
| Numero_revisori = 3
 
Il pacchetto ''ueagle-atm'' � compiulato nel kernel Debian di default (>= 2.6.10): per verificarlo digitate...
 
<pre>
$ lsmod | less
</pre>
 
...e verificate che il modulo ''ueagle-atm'' sia nella lista. Ricordate che per e eguire tale comando, prima del boot il modem usb deve essere stato collegato al computer in modo da attivare il sistema [[Udev_e_Debian#Il_sottosistema_hotplug|hotplug]] (obbligatorio per questa soluzione).
 
Se il modulo compare nel listato di ''lsmod'', non resta che far caricare il firmware per il modem.
 
Il firmware si trova all'indirizzo http://eagle-usb.org/ueagle-atm/non-free/. Si deve scaricare il pacchetto '''ueagle-data-X.tar.gz''' (X � la versione del pacchetto, al momento della scrittura della pagina X = 1.3).
 
Supponiamo di avere scaricato il pacchetto in ''/home/mioutente''.
 
Diventiamo root.
 
<pre>
$ su
</pre>
 
Scompattiamo il pacchetto
<pre>
# tar -xvzf ueagle-data-1.3.tar.gz
</pre>
 
Entriamo nella cartella che si � creata dopo aver lanciato il comando ''tar''.
<pre>
$ cd eagle-data ''(o un nome simile..)''
</pre>
 
Spostiamo i file del firmware nella cartella ''/lib/firmware'' in modo che [[Udev_e_Debian#Il_sottosistema_hotplug|hotplug]] riesca a caricarli.
 
<pre>
$ mv *.fw /lib/firmware
</pre>
 
A questo punto non ci resta che ricaricare il modulo ueagle-atm o aspettare il prossimo riavvio ed il gioco � fatto.
 
== Note Finali ==
 
{{Warningbox|Se si vuole staccare fisicamente il modem dalla porta usb, conviene scaricare prima il modulo '''eagle_usb''' altrimenti potrebbe avvenire un errore che non permette pi� la riconnessione senza riavviare il pc. Per scaricare il modulo:
<pre>
sudo modprobe -r eagle_usb
</pre>
}}
}}


; NOTA : In alcuni casi hotplug pu� non essere in grado di riconoscere il modem se questo viene spostato da una porta all'altra. Per evitare problemi si consiglia di collegare il modem sempre alla stessa porta usb.
[[Categoria:Filesystem]]
 
[[Categoria:Condivisione_risorse]]
----
[[Categoria:Crittografia]]
 
[[Categoria:SSH server e amministrazione remota]]
Autore principale: [[Utente:TheNoise|~ The_Noise]]
Autori secondari: [[Utente:Ramingo]]
[[Categoria:Hardware]]
[[Categoria:Modem ADSL]]

Versione attuale delle 19:01, 18 ago 2019

File System e dispositivi fisici
Arrow left.png

Generalità

Locali

Remoti

Strumenti

Arrow right.png



SSH
Arrow left.png

Guide correlate



Debian-swirl.png 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 Swirl-auth80.png Debianized 80%
Estesa da:
Verificata da:
Wtf 16:58, 9 ott 2013 (CEST)
mm.barabba
HAL 9000 21:01, 18 ago 2019 (CEST)

Verificare ed estendere la guida | Cos'è una guida Debianized