Linux
Creare e utilizzare chiavi SSH su Raspberry Pi

Creare e utilizzare chiavi SSH su Raspberry Pi

Definire una coppia di chiavi SSH su Raspberry Pi è abbastanza semplice, e consente una connessione SSH più sicura attraverso la rete. Qui di seguito cercherò di spiegare come sia possibile creare e configurare chiavi SSH per collegarsi remotamente ad un Raspberry Pi senza dover inserire una password.

Le chiavi SSH vengono solitamente create utilizzando la crittografia a chiave pubblica. In parole povere, una chiave pubblica viene salvata all’interno di un dispositivo remoto (come ad esempio il nostro Raspberry Pi) mentre, una seconda chiave (che rimarrà privata), viene utilizzata 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.

Per poter procedere con la guida sarà necessario avere o un accesso diretto (attraverso monitor e tastiera) oppure un accesso remoto tramite SSH o VNC al nostro Raspberry PI.

Creazione della directory SSH e del file authorized_keys

Per iniziare occorre posizionarsi nella home directory con il seguente comando:

cd ~

e di seguito creare una nuova directory denominata “.ssh” :

mkdir .ssh

Se la cartella .ssh fosse già presente, saltare alla sezione “Creazione di una nuova coppia di chiavi“.

Nei sistemi Linux, le cartelle ed i file che iniziano con il punto (“.”)  sono “nascosti al listing”, o hidden, a meno di comandi particolari.

Ora spostiamoci nella nuova directory appena creata:

cd .ssh

e andiamo a creare un file vuoto con il nome “authorized_keys”:

touch authorized_keys

Applicazione dei permessi

Di solito 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:

chmod 700 ~/.ssh

Per lo stesso motivo, occorrerà modificare i permessi anche al file “authorized_keys” in maniera tale che solo l’utente pi possa leggere e scrivere:

chmod 600 ~/.ssh/authorized_keys

Creazione di una nuova coppia di chiavi

Quando si desidera creare una nuova coppia di chiavi crittografiche, è sufficiente utilizzare il comando ssh-keygen, per cui entriamo nella directory .ssh:

cd ~/.ssh

ed eseguiamo il comando ssh-keygen:

ssh-keygen

Di seguito ci verrà richiesta una posizione in cui salvare il file delle chiavi. Premere ENTER per accettare il valore default.

Verrà quindi richiesta una passphrase, si tratta di un passaggio opzionale. Quando si imposta una passphrase, la frase verrà richiesta all’utilizzo delle chiavi come ulteriore elemento di sicurezza. Sta all’utente decidere se farne uso o meno. Per cui, inserire la passphrase o lasciare il campo in bianco, quindi premere ENTER per terminare la creazione della chiave SSH.

ATTENZIONE: se si predilige la creazione delle chiavi SSH tramite passphrase, è assolutamente necessario non dimenticarla! non vi è modo di recuperarla.

Al termine di questo processo verranno creati due file: una chiave pubblica, chiamata “id_rsa.pub” ed una seconda chiave privata chiamata “id_rsa”.

Aggiungiamo il contenuto della chiave pubblica al file authorized_keys attraverso il seguente comando:

cat id_rsa.pub >> authorized_keys

Alcuni client SSH, preferiscono chiavi in stile PuTTY. In tal caso, è opportuno creare una versione del file in questo formato ora, in modo da poterlo scaricare in futuro (se necessario).
La sequenza di comandi che segue installerà putty-tools che ci consentirà di utilizzare il comando puttygen per creare una versione PuTTY delle chiavi appena generate:

sudo apt-get install putty-tools

quindi:

puttygen id_rsa -o id_rsa.ppk

A questo punto dovrebbero essere presenti tre file:

  • id_rsa
  • id_rsa.pub
  • id_rsa.ppk

Copiamo i tre file in una posizione sicura. La chiave privata (id_rsa o id_rsa.ppk) è richiesta dal client utilizzato per la connessione al Raspberry Pi. Il client potrebbe essere un PC desktop, un laptop, un tablet  o anche uno smartphone.
La chiave pubblica (id_rsa.pub) verrà utilizzata dal nostro Raspberry Pi al quale ci si collegherà.

È possibile utilizzare la medesima chiave pubblica per diversi device, a patto che la chiave privata sia quella giusta.

Una volta salvate le chiavi in una posizione sicura, è possibile cancellarle dal nostro Raspberry Pi con il seguente comando:

rm id_rsa id_rsa.pub id_rsa.ppk

Aggiungere una chiave esistente

Qualora si abbia già una coppia di chiavi SSH (pubblica e 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’editor di testo nano con il seguente comando:

nano authorized_keys

ed incollando il contenuto del file della chiave pubblica all’interno dell’editor di testo.
Una volta terminato l’edit del file utilizziamo il comando CTRL-X, Y ed ENTER per salvare le modifiche e tornare alla linea di comando.

Il secondo metodo, invece, 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, sarà possibile rimuovere il file id_rsa.pub:

rm id_rsa.pub

Configurare il client SSH

Ora sarà 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 dal tipo di client utilizzato.

Qui di seguito un esempio dei settaggi in WinSCP :

mentre nella schermata che segue viene riportata la finestra dove impostare la chiave in PuTTY.

L’indirizzo IP e lo user name devono essere specificati. Inoltre occorrerà selezionare il file della chiave privata.

Altri client SSH operano in modo simile.

mentre se volessimo avviare una connessione SSH fornendo la chiave privata da un’altra postazione attraverso il terminale basterà digitare:

ssh pi@192.168.1.100 -i ~/.ssh/id_rsa

dove:

  • 192.168.1.100 andrà sostituito con l’IP del vostro Raspberry Pi,
  • il parametro -i indica che di seguito verrà fornito il percorso locale e il nome del file della chiave privata. In questo esempio il file della chiave privata risiede all’interno della cartella .ssh contenuta nella nostra home directory (il carattere ~ nei sistemi unix (o anche powershell) fa riferimento alla cartella home dell’utente con cui siamo autenticati).

Connessione

Arrivati a questo punto, se la configurazione è corretta, sarà possibile collegarsi con il nostro Pi senza dover inserire la password.

Sebbene diversi client possano memorizzare le password, il vantaggio delle chiavi SSH consiste nel poter utilizzare lo stesso file di chiavi su tutti i client. Infatti, cambiando il file di chiavi non sarà necessario cambiare la password su tutte le macchine nella quale era stata memorizzata.

Infine è possibile scaricare la chiave privata su di un disco rimovibile o all’interno di un contenitore cifrato (come Veracrypt). In questo modo, anche qualora il computer venisse smarrito o rubato, le connessioni al device non funzionerebbero, anche se il malintenzionato aprisse il client SSH e riuscisse a vedere le sessioni salvate. Non sarà possibile effettuare l’accesso senza il 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 l’elenco dei comandi da utilizzare per convertire i file PPK in chiavi private e public:

puttygen my_key.ppk -O private-openssh -o my_key.private
puttygen my_key.ppk -O public-openssh -o my_key.public

Buon Divertimento!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *