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
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:
- generare una chiave SSH (un file) sul PC locale Windows, Linux, Mac
- caricare il file-chiave sul server al quale desideriamo accedere in SSH
- aggiungere la chiave alla lista di quelle accettate dal server
- 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
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
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
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. Allo scopo, il comando scp
è perfetto!
» Leggi anche: Guida scp con Windows | Guida scp con Linux
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 remotoserver.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
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
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
Eventualmente, possiamo visualizzare la lista di chiavi attualmente autorizzate a connettersi impartendo:
cat $HOME/.ssh/authorized_keys
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
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:
- generare una nuova chiave sul secondo PC con
ssh-keygen
(vedi precedentePasso 1
) - caricare il file
id_rsa.pub
sul server remoto tramitescp
(vedi precedentePasso 2
) - accordarlo alla lista delle chiavi autorizzate (vedi precedente
Passo 3
) - 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):
- chiedere al collega di generare la propria chiave SSH, sul suo PC, tramite il comando
ssh-keygen
(vedi precedentePasso 1
) - 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! - caricare il file-chiave del collega sul server al quale desideriamo consentirgli l'accesso
- creare un account per il collega sul server
- aggiungere la chiave alla lista di quelle accettate sotto la "home" del collega
- 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
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)
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.