Oltre all'autenticazione tramite nome utente e password, SSH supporta l'uso di una chiave asimmetrica (volgarmente detta "chiave SSH"). Adottando questa modalità, non dobbiamo più digitare la password di SSH prima di accedere ai server remoti, poiché ci facciamo riconoscere tramite un file segreto, che contiene la nostra chiave crittografica. Questo approccio ha molteplici vantaggi: da un lato, ci evita la scocciatura di dover digitare la password nel terminale ad ogni connessione, dall'altra innalza drasticamente il livello di sicurezza, poiché la chiave è pressoché impossibile da duplicare e molto più difficile da sottrarre. Vediamo allora come creare una chiave SSH da PC Windows, Linux, Mac

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - autenticazione chiave ssh windows linux mac

In questo articolo ci concentreremo, nello specifico, sulla procedura per generare una chiave SSH su PC, e vedremo come caricarla sul server di modo da autorizzare l'accesso senza password. Per maggiori informazioni sull'uso generale di SSH:

» Leggi: SSH con Windows, Linux, Mac: la Guida Definitiva

Chiave SSH: cosa è, come funziona

Una "chiave SSH" è un file, creato sul nostro PC tramite un apposito comando. Detta chiave viene poi impostata come "autorizzata" sui server SSH ai quali dobbiamo accedere. In questo modo, il server remoto ci permette di accedere direttamente, senza password, poiché riconosce la nostra chiave.

Per configurare tutto quanto procederemo in questo modo:

  1. generare una chiave SSH (un file) sul PC locale Windows, Linux, Mac
  2. caricare il file-chiave sul server al quale desideriamo accedere in SSH
  3. aggiungere la chiave alla lista di quelle accettate dal server
  4. connettersi al server con la chiave SSH (senza password)

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - diagram ssh key rsa

Pratico, efficace, estremamente sicuro. Procediamo!

Chiave SSH, Passo "zero": Aprire il Terminale

Iniziamo aprendo il Terminale:

Una nota particolare per gli utenti Windows. I comandi ssh-keygen, scp e ssh che useremo di seguito sono integrati nativamente ed immediatamente disponibili solo a partire dalle versioni recenti di Windows 10. Chi utilizzasse ancora Windows 8 oppure Windows 7 dovrebbe aggiornare gratuitamente, oppure seguire quest'altra procedura:

» Leggi: Accedere con PuTTY (SSH) senza password a Linux/Ubuntu/CentOS

Chiave SSH, Passo 1: Generare una chiave SSH sul PC locale

Impartiamo questo comando nel Terminale per avviare la generazione della nostra chiave SSH:

ssh-keygen

Ci viene così richiesto di indicare il percorso nel quale salvare la chiave: a meno di necessità speciali, è raccomandabile battere semplicemente Invio per usare il percorso proposto di default, ovvero la cartella .ssh all'interno della "home" dell'utente corrente (la cartella verrà creata automaticamente, se non esiste). Raccomando caldamente di usare il percorso di default: così facendo, la chiave verrà usata automaticamente quando necessario, senza bisogno di configurazioni aggiuntive

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - zShotVM_1610876175

Sì, Windows 10 mostra un percorso bislacco composto da un misto di barre in avanti (/, slash) e barre inverse (\, backslash). È normale così.

Al passo successivo siamo chiamati a digitare una password per proteggere la nostra chiave. Se scegliamo di farlo, dovremo poi digitare detta password ogni volta che vorremo usare la chiave: a meno di situazioni veramente critiche, battiamo semplicemente due volte Invio per procedere senza password

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - zShotVM_1610876205

Una nota importante: se procediamo in questo modo, viene creato un file-chiave senza password. Chiunque riuscisse a rubarci tale file potrà accedere in SSH ai nostri server, senza nessun ostacolo. In caso il file-chiave fosse stato protetto da password, invece, il ladro non avrebbe potuto usarlo senza conoscere anche la relativa password. Creare una chiave senza password è dunque un potenziale rischio... da mitigare alzando al massimo il proprio livello di attenzione, per non farsi rubare il file-chiave in prima battuta!

La procedura è così terminata. Il comando mostra alcune informazioni e conferma che il file-chiave è stato creato nel percorso scelto che, ricordiamolo, è la cartella .ssh all'interno della "home" dell'utente corrente

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - zShotVM_1610876302

Il comando ssh-keygen crea due file distinti:

  1. id_rsa: è la componente segreta della chiave - non deve mai lasciare il nostro PC, né essere comunicata a nessuno!
  2. id_rsa.pub: è la componente pubblica - deve essere caricata sul server e può essere tranquillamente inviata a chiunque ce la chieda, o persino resa pubblica su Internet

Possiamo pensare al file id_rsa.pub come ad un "lucchetto" che protegge e blocca l'accesso al server. Chiunque possieda la relativa chiave associata (il file id_rsa) potrà "aprire il lucchetto" ed entrare sul server

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - diagram ssh key rsa

Questo è il motivo per cui, si diceva, il file id_rsa deve rimanere sempre assolutamente privato.

Chiave SSH, Passo 2: Caricare il file id_rsa.pub sul server al quale desideriamo connetterci in SSH

Ora dobbiamo concretamente caricare il "lucchetto" (file id_rsa.pub) sul server al quale desideriamo accedere tramite la nostra chiave. Allo scopo, il comando scp è perfetto!

» Leggi anche: Guida scp con Windows | Guida scp con Linux

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - scp ubuntu spotlight

Se stiamo lavorando con un PC Windows:

scp %USERPROFILE%\.ssh\id_rsa.pub nomeUtente@server.com:chiave.pub

Se stiamo lavorando con un PC Linux o Mac:

scp $HOME/.ssh/id_rsa.pub nomeUtente@server.com:chiave.pub

ATTENZIONE! Prestate attenzione a caricare il file con estensione .pub e non quello senza estensione, che costituisce la chiave da custodire privatamente solo sul proprio PC!

Chiaramente, dobbiamo avere l'accortezza di inserire i nostri dati:

  • nomeUtente: è lo username autorizzato a collegarsi in SSH al server remoto
  • server.com: è l'indirizzo IP (ad esempio: 95.141.36.145) oppure il nome a dominio (es: turbolab.it) del computer remoto al quale desideriamo connetterci in SSH

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password

Dovremo digitare la password per completare il caricamento del file: è tutto normale, dato che la chiave SSH non è ancora "attiva".

Chiave SSH, Passo 3: Aggiungere la chiave alla lista di quelle accettate

A questo punto, il file-chiave è disponibile sul server, ma dobbiamo ancora spostarlo nel "punto giusto". Accediamo dunque al server in SSH come al solito:

ssh nomeUtente@server.com

Ci verrà chiesto di digitare la password: facciamolo (dovrebbe essere davvero l'ultima volta!).

Una volta "dentro", assicuriamoci che il file chiave.pub che abbiamo caricato al Passo precedente sia disponibile impartendo

ls -la $HOME

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password

Creiamo ora la cartella dedicata sul server:

mkdir -p $HOME/.ssh

Infine, aggiungiamo la nostra chiave al file che contiene la lista di quelle autorizzate a connettersi (se il file non esiste, verrà creato ora):

cat chiave.pub >> $HOME/.ssh/authorized_keys

Se non riceviamo errori, tutto è andato a buon fine. Eliminiamo subito il file di chiave precedentemente caricato via SCP, di modo da non fare confusione in futuro:

rm $HOME/chiave.pub

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password

Eventualmente, possiamo visualizzare la lista di chiavi attualmente autorizzate a connettersi impartendo:

cat $HOME/.ssh/authorized_keys

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password

Abbiamo finito: possiamo disconnetterci dal server.

Chiave SSH, Passo 4: Connettersi al server con la chiave SSH

Siamo pronti a connetterci al server utilizzando la nostra chiave SSH! Il comando è sempre lo stesso:

ssh nomeUtente@server.com

La differenza sta nel fatto che, se la configurazione è stata svolta correttamente, ci ritroviamo immediatamente connessi e pronti a lavorare, senza bisogno di digitare la password

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - zShotVM_1610898115

Complimenti, è tutto!

Chiave SSH, Passo 5: Autorizzare un altro PC

La chiave SSH che abbiamo appena generato e autorizzato sul server ci consente di collegarci da questo specifico computer. Ma... come fare se desideriamo connetterci anche da un altro PC?

Una prima idea è quella di copiare la cartella .ssh dalla "home" del PC sul quale abbiamo generato la chiave e riportarla su tutti gli altri PC. Così facendo, non c'è altro da configurare e tutto funziona immediatamente, poiché il secondo PC utilizza la stessa, medesima chiave del primo.

In verità, però, questa pratica è sconsigliata, per motivi di sicurezza: come detto, la chiave privata non dovrebbe mai lasciare il PC sul quale è stata generata.

La modalità "corretta" prevede di generare una chiave SSH distinta su ogni PC, quindi accordarla alla lista di quelle autorizzate. La procedura è esattamente la stessa vista nei passaggi precedenti:

  1. generare una nuova chiave sul secondo PC con ssh-keygen (vedi precedente Passo 1)
  2. caricare il file id_rsa.pub sul server remoto tramite scp (vedi precedente Passo 2)
  3. accordarlo alla lista delle chiavi autorizzate (vedi precedente Passo 3)
  4. collegarsi senza password, anche dal secondo PC (vedi precedente Passo 4)

Ripetere per ogni computer che utilizziamo e il gioco è fatto.

Chiave SSH, Passo 6: Autorizzare un altro utente

Seguendo la procedura appena descritta, abbiamo autorizzato alla connessione tramite chiave SSH il nostro utente, magari da più PC, con chiavi diverse. Benissimo!

Ma... come fare per consentire ad un'altra persona di collegarsi anch'essa in SSH senza chiave? Se il collega dispone già di un accesso SSH al server in questione, siamo nella situazione più facile: basta invitare il collega a svolgere, sul proprio PC, la stessa, identica procedura che abbiamo seguito poco fa!

Se però siamo chiamati ad intervenire noi al suo posto, dobbiamo (nell'ordine):

  1. chiedere al collega di generare la propria chiave SSH, sul suo PC, tramite il comando ssh-keygen (vedi precedente Passo 1)
  2. chiedere al collega di passarci il file id_rsa.pub così generato, tramite email, chat, pastebin o quant'altro. Attenzione! Spieghiamo bene al collega che deve inviarci il file con estensione .pub, che è pubblico, mentre dovrà custodire privatamente l'altro, id_rsa senza estensione!
  3. caricare il file-chiave del collega sul server al quale desideriamo consentirgli l'accesso
  4. creare un account per il collega sul server
  5. aggiungere la chiave alla lista di quelle accettate sotto la "home" del collega
  6. assegnare il proprietario e correggere i permessi

Ipotizziamo che siano stati già svolti i punti 1 e 2, e che siamo dunque in possesso del file id_rsa.pub inviatoci dal collega. Apriamo una finestra di Terminale e carichiamolo, via scp, nella nostra "home" remota (similmente a quanto abbiamo fatto al precedente Passo 3). L'unica differenza sta nel fatto che dobbiamo indicare come primo parametro il percorso completo, sul PC locale, nel quale abbiamo salvato il file-chiave che ci ha passato il collega.

Se stiamo lavorando con un PC Windows, lanceremo qualcosa di simile a questo:

scp "C:\Users\zane\Desktop\id_rsa.pub" nomeUtente@server.com:chiave.pub

Se stiamo lavorando con un PC Linux:

scp "/home/zane/Desktop/id_rsa.pub" nomeUtente@server.com:chiave.pub

Se stiamo lavorando con un Mac:

scp "/Users/zane/Desktop/id_rsa.pub" nomeUtente@server.com:chiave.pub

Rimane chiaramente valida l'indicazione di personalizzare il percorso che porta al file del collega, il nome utente e il server SSH, di modo da adattarlo alla nostra situazione specifica.

Ora accediamo al server:

ssh nomeUtente@server.com

Una volta dentro, la prima cosa da fare è creare un account utente per il collega tramite il comando:

sudo useradd nomeUtenteCollega

» Leggi anche: Linux/Ubuntu: come creare un account utente da linea di comando - guida rapida a useradd e adduser

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - ubuntu linux useradd

Dobbiamo ora aggiungere la chiave del collega alla lista di quelle autorizzate sotto la sua "home".

Per prima cosa, spostiamo la chiave pubblica del collega, ovvero il file che abbiamo caricato via scp poco fa, dalla nostra "home" alla sua. Allo scopo, dobbiamo usare sudo:

sudo mv $HOME/chiave.pub /home/nomeUtenteCollega/chiave.pub

Ora creiamo la cartella .ssh nella home del collega:

sudo mkdir -p /home/nomeUtenteCollega/.ssh

Aggiungiamo la chiave del collega al file che contiene la lista di quelle autorizzate a connettersi (se il file non esiste ancora, verrà creato ora):

sudo /home/nomeUtenteCollega/chiave.pub >> /home/nomeUtenteCollega/.ssh/authorized_keys

Se non riceviamo errori, tutto è andato a buon fine. Eliminiamo subito il file di chiave precedentemente caricato via SCP, di modo da non fare confusione in futuro:

sudo rm /home/nomeUtenteCollega/chiave.pub

Se vogliamo essere bravi e professionali fino in fondo, assegnamo la proprietà della cartella .ssh al collega e correggiamo i permessi:

sudo chown nomeUtenteCollega:nomeUtenteCollega /home/nomeUtenteCollega/.ssh/ -R

sudo chmod ug=rw,o= /home/nomeUtenteCollega/.ssh/ -R

Perfetto! Ora è tutto pronto! Possiamo chiedere al collega di collegarsi e confermarci che non gli venga più richiesta la password.

Chiave SSH, Passo 7: Disabilitare il login SSH 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. In questo modo, il server SSH consentirà l'accesso solo a chi detiene una chiave autorizzata. Tutti gli altri non riceveranno più nemmeno l'invito ad inserire la password, ma verranno respinti immediatamente con un messaggio di errore. Abbiamo visto come fare qui:

» Leggi: SSH: impedire il login tramite password (Linux/Ubuntu/CentOS)

[guida] Come creare chiave SSH PC Windows, Linux, Mac accedere server senza password - putty key refused no password spotlight

Conclusioni

In questa guida abbiamo visto come creare e utilizzare le chiavi SSH. Personalmente utilizzo questa strategia su TUTTI i server che gestisco e, quando possibile, provvedo senza indugio a disattivare l'accesso SSH tramite password, di modo da ottenere un importante innalzamento del livello di sicurezza.