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.

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - putty ssh key spotlight

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 server
  • id_rsa: è la chiave privata, da spostare sul client... e custodire gelosamente, dato che consente di accedere al server!

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - ssh-keygen -t rsa

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

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (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...

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA)

... 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

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA)

PuTTYgen conferma il caricamento corretto:

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA)

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!)

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA)

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

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - putty session ssh

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)

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - putty data auto-login username

Infine, portatevi in Connection -> SSH -> Auth. Utilizzando il pulsante Sfoglia, scegliete il file creato con PuTTYgen

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - putty auth ssh key

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

Accedere PuTTY (SSH) senza password Linux/Ubuntu/CentOS: guida autenticazione chiave asimmetrica (RSA) - putty ssh Authenticating with public key

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.