Definire una coppia di chiavi SSH su di un Raspberry Pi è piuttosto semplice, e consente connessioni più sicure attraverso la rete.In questo tutorial cercheremo di spiegare in che modo sia possibile creare e configurare chiavi SSH pre potersi collegare remotamente ad un Pi senza dover ogni volta inserire una password. Un passo avanti nella IT Security.
Le chiavi SSH vengono solitamente create utilizzando la “crittografia a chiave pubblica”. In sostanza, una chiave pubblica viene salvata all’interno di un device remoto (come il nostro Raspberry Pi) mentre una seconda chiave (che rimarrà privata) viene usata dal proprietario per dimostrarne la proprietà. La chiave pubblica può essere data a chiunque, mentre la chiave privata deve restare segreta. È infatti solo la coppia che consente l’azione crittografica.
A livello pratico, le chiavi non sono altro che una lunga serie di caratteri salvati in un file di testo.
L’articolo richiede un accesso diretto ad un Raspberry PI con tastiera e monitor o un accesso remoto con SSH o VNC.
Creazione della directory SSH e del file authorized_keys
Per prima cosa occorre posizionarsi nella home directory:
1 |
cd ˜ |
e creare una nuova directory chiamata “ssh” :
1 |
mkdir .ssh |
Nel sistema operativo Linux, le directory ed i file che iniziano con il punto (“.”) sono “nascosti al listing”, o hidden, a meno di comandi particolari
Spostiamoci nella nuova directory:
1 |
cd .ssh |
e creiamo un file vuoto di nome “authorized_keys”:
1 |
touch authorized_keys |
Definizione dei permessi
Solitamente una directory appena creata ha associati i permessi 755, vale a dire lettura ed esecuzione abilitata per tutti, scrittura abilitata per il proprietario.
I permessi nella directory ssh devono essere modificati in 700, per impedire lettura, scrittura ed esecuzione a terze persone:
1 |
chmod 700 ~/.ssh |
Per la stessa ragione, occorre cambiare i permessi del file “authorized_keys” in modo che solo l’utente PI possa leggere e scrivere:
1 |
chmod 600 ~/.ssh/authorized_keys |
Creazione di una nuova coppia di chiavi
Quando si desideri creare una nuova coppia di chiavi crittografiche, è sufficiente utilizzare l’utility ssh-keygen.
Entrare nella directory .ssh:
1 |
cd ~/.ssh |
e lanciare l’utility ssh-keygen:
1 |
ssh-keygen |
Verrà richiesta una locazione in cui salvare il file delle chiavi. Premere ENTER per accettare il default.
Verrà quindi richiesta una passphrase. Si tratta di un passaggio opzionale. Quando si utilizza una passphrase, la frase potrebbe venire richiesta all’utilizzodelle chiavi come maggiore elemento di sicurezza. Sta all’utente decidere se farne uso. Inserire la passphrase o lasciare il campo in bianco, quindi premere ENTER per terminare l’azione.
ATTENZIONE: se si predilige la creazione delle chiavi SSH tramite passphrase, è assolutamente necessario non dimenticarla!
Questo processo dovrebbe creare due file: una chiave pubblica, chiamata “id_rsa.pub” ed una relativa chiave privata chiamata “id_rsa”.
Aggiungere il contenuto della relativa chiave pubblica al file authorized_keys attraverso il comando:
cat id_rsa.pub >> authorized_keys
Alcuni client preferiscono chiavi in stile PuTTY. Nel caso, è opportuno creare tali alternative in questo formato ora, in modo da poter scegliere in futuro. La lista di comandi che segue installerà puttygen per creare una versione PuTTY delle chiavi appena preparate:
1 |
sudo apt-get install putty-tools |
quindi:
1 |
puttygen id_rsa -o id_rsa.ppk |
A questo punto dovrebbero essere presenti tre file:
- id_rsa
- id_rsa.pub
- id_rsa.ppk
Copiare i tre file in una posizione sicura. La chiave privata (id_rsa o id_rsa.ppk) è richiesta dal client utilizzato per la connessione al Pi. Questo potrebbe essere lo stesso PC, un laptop o persino uno smartphone. La chiave pubblica (id_rsa) viene utilizzata dal Pi al quale ci si collegherà.
È possibile utilizzare la medesima chiave pubblica su diversi device, a patto che la chiave privata sia quella giusta.
Una volta salvate le chiavi in una posizione sicura, è possibile cancellarle dal PI.:
1 2 3 |
rm id_rsa rm id_rsa.pub rm id_rsa.ppk |
Aggiungere una chiave esistente
Qualora si abbia già una coppia di chiavi SSH pubblica/privata a disposizione, è possibile aggiungere la chiave pubblica al file “authorized_keys”.
Esistono due diversi metodi per inserire i dettagli della chiave pubblica nel file delle chiavi.
Il primo metodo consiste nel modificare il file delle chiavi direttamente attraverso l’edityor nano:
1 |
nano authorized_keys |
incollando il contenuto del file della chiave pubblica nell’editor. Si può utilizzare CTRL-X, Y ed ENTER per salvare le modifichee tornare alla linea di comando.
Il secondo metodo consiste nel copiare il file della chiave pubblica (ad esempio id_rsa.pub) nella directory .ssh per poi usare il seguente comando per aggiungerlo al file delle chiavi:
cd ~/.ssh && cat id_rsa.pub >> authorized_keys
dove “id_rsa.pub” è il file della chiave pubblica.
Ora che il file authorized_keys è stato modificato, è possibile cancellare il file id_rsa.pub:
1 |
rm id_rsa.pub |
Configurare il client SSH
Risulota ora possibile utilizzare il proprio client SSH preferito per collegarsi al Pi, ma anziché specificare la password sarà sufficiente puntare alla chiave privata. Il procedimento dipende molto dall’implementazione del client utilizzato.
As an example here are the session settings in WinSCP :
L’indirizzo IP e lo username devono essere specificati. Occorre inoltre selezionare il file della chiave privata.
Altri client SSH operano in modo simile.
Connessione
A questo punto, se la configurazione è corretta, sarà possibile collegarsi con il nosto Pi senza dover inserire la password.
Sebbene diversi client possano “ricordare” le password, il vantaggio delle chiavi SSH consiste nel poter utilizzare lo stesso file di chiavi in tutti i client. Infatti, cambiando il file di chiavi non sarà necessario cambiare la password su tutte le macchine nella quale era stata “ricordata”.
È infine possibile scaricare la chiave privata su di un disco rimovibile o all’interno di un contenitore cifrato (come Veracrypt). In tal modo, anche qualora il computer venisse rubato, le connessioni al device non funzionerebbero comunque, anche se il malintenzionato aprisse il client SSH e riuscisswe a vedere le sessioni salvate. Non esiste accesso senza file delle chiavi.
Convertire file PPK in chiavi pubblica e privata con puttygen
Qualora fosse in futuro necessario convertire un file PPK Putty PPK in un file di chiavi in stile OpenSSH, ecco di seguito la lista dei comandi da utilizzare per convertire PPK in chiavi privata e pubblica:
1 2 3 |
puttygen my_key.ppk -O private-openssh -o my_key.private puttygen my_key.ppk -O public-openssh -o my_key.public |
Abbiamo imparato come sia possibile accedere al proprio Raspberry PI attraverso il comando software SSH; tuttavia l’approccio canonico con username e password seguita a funzionare. L’importante è che la password sia sufficientemente lunga e complessa, e che la password di default del Raspberry Pi sia stata cambiata in qualcosa di meno conosciuto.
È possibile far riferimento completo alle chiavi SSH e disabilitare la possibilità di eseguire login attraverso username e password, ma di questo parleremo magari un’altra volta.