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 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 falsificare e molto più difficile da sottrarre. Vediamo allora come creare una chiave SSH da PC 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 autorizzata alla connessione 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:
- generare una chiave SSH (un file) sul PC locale Windows, Linux, Mac
- caricare il file-chiave sul server al quale desideriamo accedere in SSH
- connettersi al server con la chiave SSH (senza password)
Pratico, efficace, estremamente sicuro. Procediamo!
Chiave SSH, Passo "zero": Aprire il Terminale
Iniziamo aprendo il Terminale:
- Windows: il vecchio Prompt dei comandi va benissimo, ma raccomando caldamente di installare il più moderno Windows Terminal
- Linux: Come aprire il terminale di Ubuntu
- Mac: Come aprire il Terminale/Prompt dei comandi su Mac
Alcune note per gli utenti Windows:
- i comandi
ssh-keygen
,scp
essh
che utilizzeremo fra poco sono integrati nativamente su Windows 10 1709 (vecchia versione di settembre 2017) e successive, comprese tutte le build di Windows 11 - in ogni caso, potrebbe essere utile aggiornare SSH all'ultima versione disponibile (l'update non è sempre automatico)
- chi utilizzasse ancora Windows 8 oppure Windows 7 deve seguire quest'altra procedura: 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
Sì, Windows 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
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
Il comando ssh-keygen
crea due file distinti:
id_rsa
: è la componente segreta della chiave - non deve mai lasciare il nostro PC, né essere comunicata a nessuno!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
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. Il modo più rapido di farlo? Eccolo qua:
- aprire con Blocco note il file
id_rsa.pub
sul PC locale - copiare il contenuto
- collegarsi in SSH al server desiderato digitando, per l'ultima volta, la password di autenticazione
- creare la cartella dedicata se già non esiste:
mkdir "$HOME/.ssh"
- aprire il file dedicato:
nano "$HOME/.ssh/authorized_keys"
- incollare alla fine del file la chiave appena copiata sul PC locale
- battere
Ctrl+O
,Invio
,Ctrl+X
per uscire
ATTENZIONE! Prestate attenzione a copiare proprio il contenuto del file con estensione .pub
e non quello senza estensione, che costituisce la chiave privata e segreta da custodire solo sul proprio PC!
Abbiamo finito: possiamo disconnetterci dal server.
Chiave SSH, Passo 3: Connettersi al server con la chiave SSH
Siamo dunque 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
Complimenti, è tutto!
Chiave SSH, Passo 4: 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é tutti i PC dispongono della stessa, medesima chiave privata 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:
- generare una nuova chiave sul secondo PC con
ssh-keygen
- copiare il contenuto del file
id_rsa.pub
sul server remoto tramite - incollare la chiave sul server remoto, in coda al file
$HOME/.ssh/authorized_keys
- collegarsi senza password, anche dal secondo PC
Ripetere per ogni computer che utilizziamo e il gioco è fatto.
Chiave SSH, Passo 5: 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):
- chiedere al collega di generare la propria chiave SSH, sul suo PC, tramite il comando
ssh-keygen
- 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! - collegarci al server SSH sul quale dovrà poi accedere il collega
- creare un account per il collega sul server
- prendere in prestito l'account appena creato:
sudo -u nomeCollega -H bash
Da qui, basta seguire la procedura già indicata in precedenza per accodare la chiave nella cartella $HOME/.ssh
del collega.
Ora è tutto pronto! Possiamo chiedere al collega di collegarsi e confermarci che non gli venga più richiesta la password.
Chiave SSH, Passo 6: 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)
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.