Ssh e autenticazione tramite chiavi: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
da cancellare
mNessun oggetto della modifica
(da cancellare)
 
(32 versioni intermedie di 11 utenti non mostrate)
Riga 1: Riga 1:
=Introduzione=
{{Da cancellare | guida doppione perché il contenuto è già coperto nella guida principale su [[SSH]]}}
Spesso pu� essere necessario lavorare direttamente su un filesystem remoto (si pensi, ad esempio, alla webroot di un sito, alla home del proprio portatile, ...).
== Introduzione ==
Quando ci si deve connettere molto spesso ad un server (o a molti server) tramite '''[[SSH]]''', può essere tedioso dover inserire ogni volta la password.


sshfs permette di superare questo problema in un modo semplice e pulito: montando una directory tramite il protocollo ssh.
Un modo sicuro per ''aggirare'' questo problema è basato sull'autenticazione tramite una coppia di chiavi (privata e pubblica).


=Installazione=
Il concetto alla base di questo sistema di autenticazione è semplice: si demanda il compito di verificare i dati di autenticazione direttamente alle chiavi ssh, rimuovendo la richiesta della password (meno volte viene digitata, più è difficile che qualche utente male intenzionato la riesca a capire) che viene, eventualmente, sostituita dalla richiesta di una passphrase di sblocco della chiave.
Il pacchetto sshfs � gi� presente in Debian, quindi l'installazione si riduce ad un semplice
 
== Configurazione ==
=== Generazione delle chiavi ===
Per poter gestire questo processo di autenticazione è necessario generare una coppia di chiavi (pubblica e privata). Il comando è semplice:
<pre>
$ ssh-keygen
</pre>
Si può voler scegliere una lunghezza maggiore (default 2048) con
<pre>
<pre>
# apt-get install sshfs
$ ssh-keygen -b 4096
</pre>
</pre>
L'uso dell'opzione <code>'''-t'''</code> per indicare il tipo di chiave è [[OpenSSH#Configurazione_Client|fortemente sconsigliato]].
Durante la generazione delle chiavi ci viene chiesto dove salvarle (normalmente è <code>~/.ssh/id_rsa</code>): il valore di default va bene.


Per quanto riguarda il kernel, normalmente � presente il modulo ''fuse''. Se non � presente � necessaria la ricompilazione del kernel.
Per quanto riguarda la passphrase richiesta, sempre durante la generazione delle chiavi, ci sono due opzioni, entrambe con pregi e difetti:
Il modulo da attivare si trova in: ''File systems  --->  Filesystem in Userspace support''
* inserire una passphrase: dal punto di vista della sicurezza, è ottimo; dal punto di vista pratico, però, si è di fronte al problema che è necessario inserirla ad ogni connessione (nel caso di più host, comunque, rappresenterebbe un sistema molto comodo di accesso tramite la stessa ''passphrase'', invece di una password diversa per ogni host)
* inserire una passphrase vuota: dal punto di vista della sicurezza lascia un po' a desiderare, in quanto il furto della chiave permetterebbe l'accesso incondizionato agli host; dal punto di vista pratico, invece, è comodissimo, in quanto slega l'accesso alla macchina remota dalla richiesta di password.


=Configurazione=
In realtà questo discorso può valere in caso di utilizzo non interattivo come ad esempio in uno script, negli altri casi si può ricorrere a <code>ssh-agent</code> per mantenere in cache la passphrase per la sessione corrente:
==Creazione del punto di mount==
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):
<pre>
<pre>
# mkdir /mnt/sshdir
$ ssh-add ~/.ssh/id_rsa
</pre>
</pre>
� necessario, inoltre, impostare l'utente che utilizzer� questa directory come ''[[owner]]'':
 
=== Copia manuale della chiave pubblica ===
La chiave privata, come illustrato nel funzionamento, viene utilizzato dal computer che richiede la connessione (client), mentre quella pubblica deve essere salvata sul computer al quale connettersi (server).
 
Prendiamo, ad esempio, la seguente chiave pubblica (contenuta nel file <code>~/.ssh/id_rsa.pub</code> presente sul client):
<pre>
<pre>
# chown username /mnt/sshdir
ssh-rsa AAAAB3NzaC1kc3MAAACBAPe/PbwWkXR7qI8hcbxLRUS0/fIul0eUiSvu/hnXZXZDIZjVi1VlIbipff6n7Z6vF0hJRg6l
[cut]
gjLLTka0/QF8SP4JYFKs0Iasdju6y1slmx9IdzQt+hvMqF2+PPchCWcyBP3S5Zje4T6Az1MgrvuwCXIW6oUZXCA== user@host
</pre>
</pre>


==Permessi utenti==
Copiamo il contenuto nel file <code>~/.ssh/authorized_keys</code> presente sul server, nella home relativa all'utente usato su quella macchina e salviamo il file.
possibile permettere l'utilizzo di sshfs anche agli utenti normali, seguendo i seguenti passaggi:
 
=== Copia automatica della chiave pubblica ===
Alternativamente, è possibile usare lo script ''ssh-copy-id'' in questo modo dal client:
 
<pre>
$ ssh-copy-id -i ~/.ssh/id_rsa.pub utente@server
</pre>
oppure ancora utilizzando <code>scp</code>:
<pre>
<pre>
# chgrp fuse /usr/bin/fusermount
$ scp -P <porta> ~/.ssh/id_rsa.pub <username>@<ip del server>:~/.ssh/authorized_keys
# chmod u+s /usr/bin/fusermount
</pre>
# adduser nomeutente fuse
I permessi sulla directory remota <code>~/.ssh</code> devono essere settati a:
<pre>
drwxr-xr-x 2 utente utente  4096 30 dic 00:31 .ssh
</pre>
mentre sul file <code>~/.ssh/authorized_keys</code>:
<pre>
-rw-r--r-- 1 utente utente  610 30 dic 00:17 authorized_keys
</pre>
</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.
== Configurazione del server ==
 
Sul server, in cui deve essere già presente un'installazione di base funzionante di SSH, aggiornate il file <code>/etc/ssh/sshd_config</code> e settate i campi:
=Utilizzo e Test=
<pre>
L'utilizzo � semplice:
HostbasedAuthentication yes
RSAAuthentication yes
PubkeyAuthentication yes
</pre>
Riavviate il servizio:
<pre>
# /etc/init.d/ssh restart
</pre> e verificate di essere in grado di autenticarvi tramite chiave:
<pre>
$ ssh utente@server
</pre>
{{Box|Consiglio:|se '''non''' volete permettere il login tramite password, ma solo attraverso public key, settate anche le opzioni:
<pre>
<pre>
$ sshfs user@host:/dir/to/mount /mnt/sshdir
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
</pre>
</pre>
dove
Da non usare se avete utilizzato una passphrase nella generazione della chiave.}}
; user : � l'utente della macchine 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 percordo 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 <pre>
'''Attenzione''': in caso di autenticazione tramite chiavi, nel file di configurazione del server non va utilizzata la direttiva <code>AllowUsers</code>.
$ mount
</pre>


Per un'installazione di base di SSH si veda ad esempio la guida [[OpenSSH: file di configurazione]].


Per quanto riguarda lo smontaggio (umounting) il comando � il seguente:
== Test di funzionamento ==
Se tutto è stato eseguito correttamente, sarà possibile connettersi al server tramite un semplice:
<pre>
<pre>
$ fusermount -u /mnt/sshdir
$ ssh utente@server
</pre>
</pre>


=Faq ed Errori Frequenti=
Se è stata inserita, durante la generazione delle chiavi, una passphrase, sarà necessario usarla per completare il processo di autenticazione, altrimenti apparirà direttamente il prompt della macchina remota.
==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 <pre>
== Approfondimenti ==
# modprobe fuse
* [http://www.debian.org/doc/manuals/reference/ch06.it.html#_the_remote_access_server_and_utility_ssh La guida Debian: SSH]
</pre>


==mountpoint is not empty==
[[Categoria:SSH server e amministrazione remota]]
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
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 ''sshfs'' l'opzione ''-o nonempty''
3 581

contributi

Menu di navigazione