Digitare la password ad ogni accesso via SSH è una prassi insicura, tediosa e superflua: configurando l'uso di una "chiave" software, siamo liberi di connetterci automaticamente e con la massima sicurezza
Se utilizzi Windows 10, la presente guida è obsoleta. Consulta invece quest'altra: Come creare una chiave SSH da PC Windows, Linux, Mac e accedere ai server senza password. La trattazione seguente rimane invece valida per Windows 8 e Windows 7, oppure se, per qualsiasi motivo, preferisci usare PuTTY rispetto al comando ssh nativo.
Quella che andremo ad implementare di seguito è un'autenticazione mediante chiave asimmetrica. Si tratta di un modello composto da due chiavi software: una pubblica, da caricare sul server, e una privata, da conservare sul PC dal quale si lavora. Grazie alla matematica, SSH sarà poi in grado di riconoscere la chiave privata autorizzata, concedendo immediatamente l'accesso.
Prima di cominciare..
Per svolgere questa procedura sono necessari i privilegi di root: per non incappare in inutili problemi, raccomando di accedere direttamente con questo account (i più intraprendenti possono usare un account "regolare" e far precedere i comandi da sudo
, ma non ho testato questo scenario).
Generare la chiave sul server
La prima cosa da fare è generare la coppia di chiavi. Lavoreremo direttamente sul server, dotato di tutto il necessario in maniera nativa. Entrate via SSH come di consueto, quindi impartite quanto segue:
ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''
Il comando va bene così come presentato, senza modificare nulla. Questo il significato di vari argomenti:
-t rsa
: genera la chiave utilizzando l'algoritmo RSA-f ~/.ssh/id_rsa
: scrive la chiave in questo percorso (default). Se omesso, richiede di indicare il percorso in modo interattivo-N ''
: crea la chiave senza frase di sicurezza (passphrase). Non preoccupatevi troppo: nessun altro client riuscirà ad accedere al server senza la chiave privata!
Confermate la volontà di sovrascrivere (se richiesto). Terminata l'elaborazione, le due chiavi sono pronte:
id_rsa.pub
: è la chiave pubblica, da conservare sul serverid_rsa
: è la chiave privata, da spostare sul client... e custodire gelosamente, dato che consente di accedere al server!
Rinominate id_rsa.pub
nel file che viene poi effettivamente letto dal server SSH per consentire l'accesso: mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
.
Trasferire la chiave privata sul client
Come detto, dobbiamo ora trasferire la chiave privata sul client dal quale ci vogliamo poi connettere via SSH senza immettere la password.
Il modo più rapido? verificando di non essere osservati, lanciate cat ~/.ssh/id_rsa
per mostrare a schermo la chiave, quindi copiate a partire da -----BEGIN RSA PRIVATE KEY-----
fino ad arrivare a -----END RSA PRIVATE KEY-----
(estremi compresi), incollate in un blocco note e salvate sul disco locale con il nome id_rsa
Ovviamente, questa è la strada "da praticoni". Se volete essere più professionali, utilizzate un client come FileZilla in modalità SFTP per scaricare il file in locale.
Eliminare la chiave privata dal server
È una buona idea eliminare la chiave privata dal server dopo volta averla trasferita sul PC di lavoro. Il comando è: rm -f
~/
.ssh/id_rsa
.
Convertire id_rsa in "formato PuTTY"
Purtroppo, PuTTY non è in grado di interpretare direttamente il file id_rsa
generato poco fa: è prima necessario convertirlo in un formato differente.
Scaricate l'utilità PuTTY Key Generator (PuTTYgen) e avviatela. Cliccate sul pulsante Load
...
... e sfogliate il vostro disco fisso fino a localizzare il file id_rsa
che avete prelevato dal server un attimo fa. Fate attenzione! Tale file non sarà visibile fino a quando non selezionerete Tutti i file (*.*)
dal menu a tendina in basso a destra!
Selezionate il file id_rsa
e premete Apri
PuTTYgen conferma il caricamento corretto:
Dopo aver cliccato su OK
alla schermata informativa, potete personalizzare il campo Key comment:
con un messaggio a piacere (io metto il mio nome e l'anno in cui ho generato la chiave), poi premete il pulsante Save private key
(attenzione! è quello di destra!)
Confermate la volontà di salvare senza passphrase (v. paragrafi precedenti).
Dovete ora indicare il nome e il percorso nel quale salvare la chiave privata appena convertita: raccomando di scegliere la stessa cartella di PuTTY, usando un nome "parlante", senza spazi e specificando esplicitamente l'estensione (esempio: chiave_privata_server_sviluppo.ppk
)
Chiudete PuTTYgen.
"Caricare" la chiave in PuTTY
Ora che abbiamo la nostra chiave privata convertita in un formato comprensibile a PuTTY, non resta altro da fare se non configurare il programma affinché presenti tale file al server durante la richiesta di accesso.
Lanciate PuTTY e, dalla schermata iniziale (ramo Session
), inserite il nome dell'host al quale connettervi
Spostatevi nel ramo Connection -> Data
e digitate il nome utente da utilizzare sul server per l'autenticazione SSH nel campo Auto-login username
(in condizioni standard, sarà il consueto root
)
Infine, portatevi in Connection -> SSH -> Auth
. Utilizzando il pulsante Sfoglia
, scegliete il file creato con PuTTYgen
Tornate quindi al ramo di opzioni iniziale (Session
) e cliccate su Save
per salvare questo profilo.
Connettersi in SSH senza password
D'ora in avanti, facendo doppio click sulla vostra sessione in PuTTY, potrete entrare immediatamente sul server SSH senza che sia richiesta la password. La dicitura Authenticating with public key
mostrata subito dopo il login vi conferma che l'accesso è autorizzato proprio grazie alla chiave
Disabilitare il login con password
Terminata questa configurazione e dopo aver verificato che tutto funzioni correttamente, possiamo fare un passo in avanti importante per la sicurezza: disabilitare completamente l'accesso SSH tramite password. La procedura è in "SSH: impedire il login tramite password (Linux/Ubuntu/CentOS)".
Come consentire l'accesso ad altre persone
La procedura appena illustrata crea una coppia di chiavi che consentono ad una persona di accedere al server. Ma se anche un secondo utente deve poter entrare, le cose si complicano un pochino. L'idea più semplice è condividere la chiave privata appena generata con tutti i membri del team. Funziona e risolve rapidamente il problema, ma non è la scelta migliore per una lunga lista di motivi. La cosa giusta da fare è impiegare una coppia distinta di chiavi per ogni persona, e far sì che il server le accetti tutte.
Se il secondo collega vi ha inviato una propria chiave pubblica, rinominate il file in collega.pub
e caricatelo sul server in /root/.ssh/collega.pub
.
Se invece il collega che vuole l'accedere non vi ha mandato una sua chiave pubblica, dovete generarla per lui. Lanciate nuovamente ssh-keygen -t rsa
. Questa volta, però, alla richiesta del percorso in cui salvare la chiave digitate /root/.ssh/collega
. Subito dopo, scaricate dal server il file /root/.ssh/collega
e inviatelo al collaboratore: è la sua chiave privata, da caricarsi in PuTTY come descritto in precedenza, per entrare.
Tornando al server: l'ultimo passaggio da svolgere è autorizzare l'accesso con la chiave del collega. Basta fare cat /root/.ssh/collega.pub » ~/.ssh/authorized_keys
e il gioco è fatto. Potete ora eliminare i file temporanei: rm -f ~/.ssh/collega*
Ripetete l'operazione per ogni altra persona che deve poter entrare.