Gestione delle chiavi SSH: una guida pratica

  • VersionDude
  • Strumenti
  • 6 min di lettura

Le chiavi SSH sostituiscono le password con qualcosa di molto più robusto, ma solo se le proteggi, le separi e le ruoti. Una guida chiara e senza fronzoli per gestire le chiavi SSH in sicurezza.

La gestione delle chiavi SSH è la pratica di generare, proteggere, distribuire e dismettere le coppie di chiavi crittografiche che usi per accedere ai server tramite SSH. Fatta bene, sostituisce le fragili password con chiavi molto più difficili da indovinare e ti permette di revocare l'accesso in modo pulito quando si perde un portatile o quando un collaboratore esterno se ne va. Fatta male, con chiavi prive di passphrase, copiate da una macchina all'altra e mai ruotate, diventa silenziosamente una delle porte più ampie verso la tua infrastruttura.

Il motivo per cui merita attenzione è che una chiave SSH è una credenziale permanente. A differenza di una password che digiti, una chiave privata risiede in un file su disco e concede l'accesso per tutto il tempo in cui la chiave pubblica corrispondente resta nel file authorized_keys di un server. Una singola chiave non protetta, trafugata da un backup o da una macchina compromessa, può dare a un aggressore lo stesso raggio d'azione che hai tu, ed è esattamente per questo che le chiavi degli sviluppatori e quelle dei sistemi CI/CD sono un bersaglio così ambito.

Come funzionano davvero le chiavi SSH

Un lucchetto di ottone e la sua chiave appoggiati su un mucchio di catene di acciaio.
Un lucchetto di ottone e la sua chiave appoggiati su un mucchio di catene di acciaio.

Una coppia di chiavi SSH ha due metà. La chiave privata resta sulla tua macchina e non deve mai lasciarla; la chiave pubblica viene copiata su ogni server a cui vuoi accedere, dove risiede in ~/.ssh/authorized_keys. Quando ti connetti, il server sfida il tuo client a dimostrare di possedere la chiave privata, senza che la chiave stessa attraversi mai la rete. Il possesso di quel file privato è quindi tutto.

La pratica moderna predilige l'algoritmo Ed25519, breve, veloce e robusto, rispetto alle più vecchie chiavi RSA, anche se le chiavi RSA da 3072 bit o più restano accettabili dove Ed25519 non è supportato. Generi una coppia con ssh-keygen, e l'opzione in assoluto più importante è una passphrase: cifra la chiave privata su disco, in modo che un file di chiave rubato sia inutile per chiunque non conosca anche la frase.

Buone pratiche per le chiavi SSH

Pochi accorgimenti coprono la maggior parte del rischio. Imposta sempre una passphrase e lascia che ssh-agent tenga la chiave decifrata in memoria, così la digiti una volta sola per sessione invece di disabilitarla. Usa una chiave distinta per ogni dispositivo invece di copiare un'unica chiave privata su più portatili, così puoi revocare una singola macchina senza disturbare le altre. E assegna ai sistemi CI e ai server le proprie chiavi, mai quella personale.

  • Proteggi sempre le chiavi private con una passphrase
  • Preferisci Ed25519; usa una chiave distinta per ogni dispositivo
  • Assegna ai sistemi CI e ai server le proprie chiavi
  • Controlla authorized_keys e rimuovi gli accessi obsoleti
  • Ruota le chiavi secondo una cadenza e quando un dispositivo viene perso

L'accesso è concesso interamente da ciò che si trova nel file authorized_keys di ciascun server, quindi è proprio in quel file che avviene davvero la gestione. Esaminalo periodicamente, rimuovi le chiavi di persone e macchine che non hanno più bisogno di accedere e mantieni su ogni chiave un commento breve e descrittivo, così da capire a colpo d'occhio a chi appartiene. Oltre i pochi server, uno strumento di configuration management o una certificate authority SSH gestisce tutto questo molto meglio della modifica manuale dei file.

La rotazione chiude il cerchio. Pianifica di sostituire le chiavi secondo una cadenza prestabilita e subito ogni volta che un dispositivo viene perso, che una passphrase potrebbe essere stata vista o che qualcuno con accesso se ne va. Poiché revocare una chiave significa semplicemente rimuovere la sua metà pubblica da authorized_keys, le chiavi denominate e inventariate sono enormemente più facili da dismettere rispetto a quelle anonime di cui non riesci più a tenere traccia.

La rotazione chiude il cerchio. Pianifica di sostituire le chiavi secondo una cadenza prestabilita e subito ogni volta che un dispositivo viene perso, che una passphrase potrebbe essere stata vista o che qualcuno con accesso se ne va. Poiché revocare una chiave significa semplicemente rimuovere la sua metà pubblica da authorized_keys, le chiavi denominate e inventariate sono enormemente più facili da dismettere rispetto a quelle anonime di cui non riesci più a tenere traccia.

— VersionDude

Dove conservare chiavi e passphrase

Il file della chiave privata in sé dovrebbe restare sul dispositivo che lo usa, protetto dalla sua passphrase e dai permessi sui file del sistema operativo, non sincronizzato in giro in cartelle cloud in chiaro. Ma le passphrase che sbloccano quelle chiavi, insieme ai codici di recupero e all'occasionale chiave che devi davvero conservare come backup, hanno bisogno di una casa sicura, e un file di testo semplice o un'app per appunti non lo è.

Un password manager con cifratura end-to-end è il posto giusto per quei segreti: le passphrase, i codici di recupero e qualsiasi materiale di chiave esportato vengono cifrati prima di lasciare il tuo dispositivo e sincronizzati in sicurezza tra le macchine che possiedi. Mantiene la parte di sicurezza SSH memorizzabile da un essere umano lontano da occhi indiscreti, senza l'onere operativo di gestire un proprio server vault.

Progetto correlato