Per collegarsi ai propri server in modo sicuro, è possibile utilizzare le chiavi SSH. Questo metodo sfrutta la crittografia asimmetrica (chiave pubblica e chiave privata) per stabilire una connessione autenticata e protetta, eliminando la necessità di inserire password.
La Crittografia Asimmetrica
La crittografia asimmetrica è un sistema che utilizza due chiavi matematicamente correlate ma distinte: una pubblica e una privata. La caratteristica fondamentale è che ciò che viene cifrato con una chiave può essere decifrato solo con l’altra.
| Caratteristica | Chiave Privata | Chiave Pubblica (.pub) |
|---|---|---|
| Dove si trova | Solo sul tuo computer (~/.ssh/) |
Sui server remoti (~/.ssh/authorized_keys) |
| Condivisione | Mai condividere | Può essere distribuita liberamente |
| Funzione | Dimostra la tua identità | Verifica l’identità di chi si collega |
| Permessi file | 600 (solo proprietario) |
644 (leggibile da tutti) |
In sintesi, la coppia di chiavi è composta da: una chiave privata che deve essere custodita e mai condivisa, che serve per verificare la tua identità, e una chiave pubblica da distribuire sui server a cui vuoi accedere.
Generare una Chiave SSH
In questo esempio andremo a generare una chiave SSH utilizzando come metodo di cifratura l’algoritmo Ed25519 , che al momento della scrittura di questa guida è considerato il più moderno e sicuro disponibile. Utilizza curve ellittiche (Curve25519), produce chiavi corte ma estremamente sicure, ed è supportato da OpenSSH 6.5+ (2014). Per generare la chiave è possibile utilizzare il seguente comando (da modificare nei parametri).
ssh-keygen -t ed25519 -C "accesso-server-produzione" -f ~/.ssh/produzioneNello specifico, i parametri utilizzati per la generazione di questa chiave sono descritti nella tabella sottostante.
| Parametro | Descrizione |
|---|---|
-t ed25519 |
Specifica l’algoritmo di crittografia |
-C "accesso-server-produzione" |
Aggiunge un commento identificativo alla chiave |
-f ~/.ssh/produzione |
Percorso e nome del file della chiave |
Durante il processo di generazione ti verrà chiesto se vuoi inserire una Passphrase (ossia una password) per proteggere la chiave privata. È opzionale ma da molti consigliata, in quanto se qualcuno dovesse accedere al tuo filesystem, senza la passphrase da te inserita la chiave sarebbe inutilizzabile.
Dopo l’esecuzione troverai due file: ~/.ssh/produzione che è la chiave privata (da non condividere MAI) e ~/.ssh/produzione.pub che è la chiave pubblica (da copiare sui server).
Installare la Chiave sul Server
Questo sistema è considerato molto più sicuro rispetto a una password tradizionale, in quanto la chiave privata non viene mai trasmessa sulla rete. Il processo di login avviene in questo modo:
- Tu generi una coppia di chiavi sul tuo computer (privata e pubblica)
- Copi la chiave pubblica sul server remoto
- Quando ti colleghi, il server invia una “sfida” cifrata con la tua chiave pubblica
- Solo tu, possedendo la chiave privata, puoi decifrare la sfida e dimostrare la tua identità
Per installare la chiave sul server remoto in modo automatico, utilizza il comando qui sotto. Questo provvederà a copiare la chiave pubblica nella cartella ~/.ssh, impostare i permessi corretti e aggiungere la chiave al file authorized_keys.
ssh-copy-id -i ~/.ssh/produzione.pub utente@120.121.122.123Alla prima esecuzione del comando ti verrà chiesta la password dell’utente remoto, per verificare la validità dell’account e i suoi permessi, e quindi abbinare quella chiave all’utente. Successivamente non verrà più richiesta alcuna password.
Permessi dei file
SSH è molto rigoroso sui permessi dei file. Se i permessi sono troppo aperti (es. 777), rifiuterà l’autenticazione per motivi di sicurezza.Stabilire una Connessione
Una volta eseguita la configurazione su entrambi i sistemi (client e server), sarà possibile utilizzare la chiave SSH per accedere al server. Per farlo, è necessario indicare quale chiave utilizzare durante la richiesta di connessione.
ssh -i ~/.ssh/produzione utente@120.121.122.123Se tutto è configurato correttamente, accederai senza inserire la password (o inserendo solo la passphrase della chiave, se l’hai impostata).
Creare un Alias
Per evitare di dover indicare ogni volta il percorso della chiave e specificare a quale server connettersi, è possibile configurare un alias. Richiede un piccolo investimento di tempo iniziale, ma ti farà risparmiare molto tempo e ti semplificherà la vita.
Per configurare un alias, modifica il file ~/.ssh/config con il seguente comando.
nano ~/.ssh/configAggiungi i parametri della connessione, strutturati come nell’esempio sotto:
Host nome-alias
HostName 120.121.122.123
User utente
IdentityFile ~/.ssh/produzioneOra puoi connetterti semplicemente digitando nel terminale:
ssh nome-aliasBuone Pratiche di Sicurezza
Le chiavi SSH sono un ottimo metodo per connettersi a server remoti, ma è comunque necessario seguire alcune regole per aumentare il livello di sicurezza.
- Usa sempre una passphrase per le chiavi private, in modo che non possano essere utilizzate da altri semplicemente “copiando” il file della chiave
- Non riutilizzare la stessa chiave per tutti i server: se la chiave viene compromessa, si compromette l’intero sistema
- Esegui un backup sicuro delle chiavi private (ad esempio in un password manager)
- Revoca le chiavi quando non servono più (rimuovile dal file
authorized_keys)