Il protocollo SSH offre un ottimo livello di sicurezza, ma quando viene esposto ad accesso da Internet diventa rapidamente oggetto di frquenti tentativi di accesso non autorizzati.
Utilizzare certificati basati su chiave pubblica e privata è senz’altro una buona misura di sicurezza che è opportuno considerare.
la crittografia asimmetrica, o più semplicemente la crittografia basata su chiave pubblica e privata è alla base dei moderni sistemi di crittografia ed è opportuno conoscerne almeno i principi di funzionamento. A tale scopo può essere utile la definizione disponibile su Wikipedia: Crittografia asimmetrica. Sostanzialmente dalla chiave privata può essere derivata la chiave pubblica, ma non viceversa e un contenuto crittografato con chiave privata può essere portato in chiaro tramite la chiave pubblica così come un contenuto crittografato tramite chiave pubblica può essere portato in chiaro tramite la chiave privata. Se pubblico un contenuto crittografato tramite chiave privata, tutti coloro che sono in possesso della chiave pubblica saranno in grado di riportare in chiaro la mia pubblicazione avendo inoltre la certezza che sia stato davvero io a fare la pubblicazione, inquanto solo io sono in possesso della chiave privata. D’altra parte, se pubblico un contenuto crittografato tramite la chiave pubblica di un’altra persona, solo lei sarà in grado di riportare in chiaro la mia pubblicazione, indipendentemente dal numero delle persone che la riceveranno. Sono possibili anche combinazioni complesse dei metodi di crittografia citati, ma quelli elencati sono e restano fondamentali.
Tecnologicamente il funzionamento di questo tipo di crittografia è particolarmente robusto, a patto che il proprietaro custodisca in maniera adeguata il suo certificato (contenente la chiave privata e la possibilità di derivare la chiave pubblica). Se anche solo un’altra persona entrasse in possesso della chiave privata tutto il meccanismo sarebbe compromesso e non offrirebbe più acuna garanzia.
Vediamo ora come utilizzare questo meccanismo per autenticarci in maniera sicura usando ssh.
La prima operazione da effettuare è la generazione della coppia di chiavi pubblica e privata che saranno successivamente utilizzate. Il collegamento avviene da un client verso un server. La chiave privata va custodita sul client ed è quindi naturale che venga generata proprio sul client. Il comando da impartire per la generazione delle chiavi è: ssh-keygen -t (tipo di codifica) -b (lunghezza della chiave) -C (un commento che ci aiuti ad identificare il prorietario del certificato) verranno usati user-id e nome del client che useremo per il collegamento.
ssh-keygen -t rsa -b 2048 -C <user-id>@<client-name>
Poiché non lo abbiamo dichiarato, il comando ci chiede in maniera interattiva la conferma del percorso da utilizzare per l’archiviazione delle chiavi. Di default propone la cartella .ssh sotto la home dell’utente che genera la chiave. Se ci sono ragioni particolari è possibile modificare il percorso di default. Eseguito il comando avremo archiviato i due certificati identificati come id_rsa (privata) e id_rsa.pub (pubblica). Come già detto in precedenza, la chiave privata deve essere conservata gelosamente, mentre perché il meccanismo funzioni, la chiave pubblica va consegnata e installata opportunamente nel server che vogliamo che ci riconosca: l’installazione della chiave pubblica avviene aggiungendola alla lista contenuta nel file authorized_keys nella cartella .ssh sotto la home dello user, nel server con cui ci vogliamo collegare. E’ possibile usare un normale editor di testi, ma è preferibile usare un apposito script preposto a questo scopo:
ssh-copy-id -i ~/.ssh/id_rsa user@host
Verranno chieste, dal server remoto (host), le credenziali di accesso e successivamente la chiave pubblica sarà installata, rendendo automatico, d’ora in poi, il riconoscimento dell’utente.
Suggerimenti:
1) vale la pena verificare che i permessi dei file id_rsa e id rsa.pub siano settati rispettivamente a -rw——- e -rw-r–r–
un settaggio più permissivo non consentirà un corretto funzionamento.
2) E’ possibile che il server che si vuole connettere non accetti accessi basati su credenziali (usr/pwd). In tal caso, da una connessione abilitata si potrà intervenire sul file di configurazione /etc/ssh/sshd_config andando ad agire sulla direttiva:
PasswordAuthentication
E’ anche possibile che il client dal quale ci si vuole connettere non consenta accessi basati su credenziali (usr/pwd). In tal caso si può intervenire sul file /etc/ssh/ssh_config andando ad agire sulla stessa direttiva indicata precedentemente.
Se l’argomento vi ha, per qualche motivo, interessato particolarmente, forse vorrete proseguire con la lettura anche di questo articolo: Disabilitare accesso SSH con credenziali