SSH: utilizzare una chiave
L’autenticazione SSH tramite chiave è più sicura dell’autenticazione effettuata tramite password.
Per questo motivo su alcune macchine l’autenticazione via password è disabilitata, e quindi vi si può accedere solo tramite chiave.
È necessario proteggere in maniera adeguata la chiave privata, ad esempio con l’utilizzo di una buona passphrase, e con l’opportuna conservazione della chiave privata stessa e delle sue copie di backup.
Creazione della chiave
Linux & Mac
Lanciare il comando:
ssh-keygen
Il programma chiederà in che file salvare la nuova chiave. Se è la prima che generate, potete utilizzare il nome proposto, battendo invio; altrimenti sarà necessario specificare un nuovo nome per non sovrascrivere la vecchia chiave.
Dopodiché il programma chiederà una passphrase che verrà utilizzata per proteggere la chiave privata, cifrandola. Ogni volta che in seguito verrà utilizzata la chiave, sarà poi necessario digitare questa passphrase (ma vedi sotto l’utilizzo dell’agente, per limitare il numero di volte in cui è necessario fare questa operazione). La passphrase non lascia mai il proprio computer, viene utilizzata solo localmente per decifrare la chiave privata.
Il programma stampa i percorsi dei file in cui sono state salvate la
parte pubblica della chiave, e la parte privata. Se non si è specificato
un nome diverso, la parte pubblica della chiave è contenuta nel file
.ssh/id_rsa.pub
.
Il formato della chiave pubblica è di questo tipo:
ssh-rsa AAAAB3NzaC1yc2... user@machine
Questa è la chiave da inviare per essere abilitati all’accesso alle macchine
remote, o da salvare nel file ~/.ssh/authorized_keys
quando si ha già accesso
tramite password, e si vuole passare all’autenticazione tramite chiave.
Windows (puttygen)
Per Windows conviene scaricarsi i tool putty.exe
e puttygen.exe
, ad
esempio dal
sito ufficiale per Putty.
Con quest’ultimo è possibile crearsi una chiave, premendo il pulsante Generate
.
Dopo aver generato la chiave è possibile specificare una passphrase, che servirà a proteggere la chiave privata.
Nella finestra viene visualizzata la chiave pubblica, nel formato adatto
all’utilizzo nel file authorized_keys
. Sfortunatamente il pulsante
Save public key
salva la chiave in un formato diverso, quindi bisogna
copiare la chiave pubblica dalla finestra di puttygen.exe
.
È comunque necessario salvare la propria chiave privata per poterla utilizzare in seguito; altrimenti viene persa alla chiusura del programma.
puttygen.exe
salva all’interno del file .ppk sia la chiave privata
che la corrispondente chiave pubblica.
È possibile aprire una chiave .ppk in un secondo tempo tramite il pulsante
Load
, ad esempio per visualizzare la chiave pubblica corrispondente nel
formato utilizzato per l’authorized_keys
.
Utilizzo della chiave (lato server)
Nella propria area utente (la home), è necessario creare una directory
.ssh
, con permessi impostati a 700
.
All’interno della directory .ssh è necessario creare un file
authorized_keys
, con permessi impostati a 600
.
Il formato del file è semplice: una linea per ogni chiave pubblica da autorizzare.
Se si incolla la chiave da terminale, controllare che sia effettivamente salvata su una linea sola, e non spezzata su più linee.
Utilizzo della chiave (lato client)
Linux & Mac
Con ssh è possibile utilizzare una chiave specifica utilizzando l’opzione
-i
. Non è necessario se la chiave ha il nome di default (id_rsa
).
Esempio di connessione con la chiave di default:
ssh user@server
Esempio di connessione con un’altra chiave:
ssh -i ~/.ssh/gitlab git@gitlab.di.unipmn.it
ssh-agent
Solitamente gli ambienti grafici lanciano in background un agente di
autenticazione, chiamato ssh-agent
; in caso di utilizzo ripetuto di
una chiave è possibile utilizzare l’agente per non dover ripetere ogni
volta la passphrase. (Sui Mac dovrebbe essere il KeyChain a gestire
le chiavi usate con ssh.)
Ad esempio, per rendere disponibile la chiave di default all’agente:
ssh-add
Se invece si vuole utilizzare un’altra chiave:
ssh-add ~/.ssh/gitlab
È possibile rimuovere tutte le chiavi dall’agente con il comando:
ssh-add -D
Windows (putty)
Con putty è possibile associare una chiave privata a un profilo di connessione.
Per farlo occorre aprire il profilo, selezionare nel menù a sinistra
Connection -> SSH -> Auth
, e poi premere il pulsante Browse
di fianco
a Private key file for authentication
.
Ricordarsi poi di salvare il profilo!
Volendo è possibile salvare le impostazioni come default, in modo da averle come base di partenza per i profili che verranno creati successivamente.
Nota: In questo caso, i profili già esistenti non verranno modificati, e non verrà aggiunta loro la chiave privata.
Quante chiavi mi servono?
In linea generale, una buona strategia è avere una chiave diversa per ogni computer o dispositivo client. In questo modo è più semplice revocare una chiave quando non è più in nostro possesso, ad esempio in caso di furto del dispositivo. A ogni nuovo dispositivo bisogna però ricordarsi di aggiungere la nuova chiave su tutti i servizi a cui si vuol accedere, collegandosi con una chiave già autorizzata su un dispositivo precedente.
È poi possibile utilizzare chiavi diverse per servizi diversi. In questi
casi conviene usare il file .ssh/config
per fare utilizzare la chiave
corretta a ssh in base alla destinazione. Ad esempio:
Host my-remote-server
User my-remote-username
IdentityFile ~/.ssh/a-separate-key
La prima strategia è sempre consigliata, perché semplifica la gestione a lungo termine, e aiuta anche a fare una corretta rotazione periodica delle chiavi.
La seconda è a discrezione dell’utente, perché la sua gestione, specialmente nel caso di più dispositivi, comporta del lavoro aggiuntivo.
È ovviamente possibile procedere anche per vie intermedie; ad esempio avere una chiave diversa per ogni dispositivo per un certo tipo di accessi (ad esempio, SSH sui server), e una chiave unica per ciascun servizio, condivisa fra i dispositivi, per altri utilizzi (ad esempio, una chiave per Gitlab, una chiave per GitHub, etc).