Guida per principianti alle chiavi SSH: Generare, usare e gestire in modo sicuro

Genera chiavi SSH, copia le chiavi pubbliche sui server, usa ssh-agent e gestisci la configurazione SSH specifica per host in modo sicuro.

Guida per Principianti alle Chiavi SSH: Generare, Usare e Gestire in Modo Sicuro

Le chiavi SSH ti permettono di accedere ai server senza inviare una password riutilizzabile sulla rete. Se gestisci server Linux, istanze cloud o repository Git remoti, una chiave SSH adeguatamente protetta è solitamente più sicura e più facile dell'accesso basato su password.

Questa guida per principianti ti mostra come generare una coppia di chiavi SSH, copiare la chiave pubblica su un server, connetterti con la chiave privata corretta e mantenere le tue chiavi gestibili man mano che la tua lista di server cresce.

Comprendere le Coppie di Chiavi SSH

L'autenticazione tramite chiave SSH si basa su una coppia di chiavi crittografiche: una chiave privata e una chiave pubblica. Queste chiavi sono matematicamente collegate, ma è computazionalmente impossibile derivare la chiave privata da quella pubblica.

  • Chiave Privata: Questa chiave deve essere tenuta segreta e non dovrebbe mai essere condivisa. Risiede sulla tua macchina locale e funge da tua identità. Quando avvii una connessione SSH, il tuo client usa la tua chiave privata per dimostrare la tua identità.
  • Chiave Pubblica: Questa chiave può essere condivisa liberamente. Inserirai la tua chiave pubblica sui server remoti a cui desideri accedere. Quando tenti di connetterti, il server usa la tua chiave pubblica per verificare che possiedi la corrispondente chiave privata.

Quando tenti di connetterti a un server, si verifica il seguente processo:

  1. Il tuo client SSH presenta la tua chiave pubblica al server.
  2. Il server verifica se questa chiave pubblica è autorizzata (cioè presente nel suo file authorized_keys).
  3. Se autorizzata, il server invia una sfida al tuo client.
  4. Il tuo client firma la sfida con la tua chiave privata e invia la firma al server.
  5. Il server verifica la firma con la tua chiave pubblica. Se la firma è valida, l'autenticazione viene concessa senza password.

Generare Coppie di Chiavi SSH

Lo strumento più comune per generare coppie di chiavi SSH è ssh-keygen. Questo comando è disponibile sulla maggior parte dei sistemi Linux, macOS e Windows (tramite WSL o Git Bash).

Usare ssh-keygen

Per generare una nuova coppia di chiavi SSH, apri il terminale o il prompt dei comandi ed esegui il seguente comando:

ssh-keygen -t ed25519

Analizziamo questo comando:

  • ssh-keygen: Il comando per generare chiavi SSH.
  • -t ed25519: Specifica il tipo di chiave da creare. ed25519 è un moderno algoritmo di crittografia a curva ellittica, altamente sicuro e veloce. Altre opzioni comuni includono rsa (ad esempio, ssh-keygen -t rsa -b 4096 per una chiave RSA a 4096 bit).

Eseguendo il comando, ti verranno poste alcune domande:

  1. Inserisci il file in cui salvare la chiave (ad esempio, /home/tuo_utente/.ssh/id_ed25519): Premi Invio per accettare la posizione predefinita. Questo creerà due file nella tua directory .ssh: id_ed25519 (la tua chiave privata) e id_ed25519.pub (la tua chiave pubblica).
  2. Inserisci una passphrase (vuota per nessuna passphrase): Questo è un passaggio di sicurezza cruciale. Inserire una passphrase crittografa la tua chiave privata sul disco. Se il file della chiave privata viene mai compromesso, l'attaccante avrebbe comunque bisogno della passphrase per usarla. È altamente raccomandato usare una passphrase forte.
  3. Inserisci di nuovo la stessa passphrase: Conferma la tua passphrase.

Comprendere i File di Output

Dopo la generazione, verranno creati due file nella tua directory ~/.ssh/ (o nel percorso specificato):

  • id_ed25519 (o id_rsa): La tua chiave privata. NON CONDIVIDERE MAI QUESTO FILE. Limita i suoi permessi alla sola lettura per il tuo utente.
  • id_ed25519.pub (o id_rsa.pub): La tua chiave pubblica. Questa è la chiave che distribuirai ai server.

Proteggere la Tua Chiave Privata

È essenziale assicurarsi che la tua chiave privata abbia i permessi corretti. Su Linux/macOS, esegui:

chmod 600 ~/.ssh/id_ed25519

Questo comando limita i permessi di lettura e scrittura al solo proprietario del file, impedendo ad altri utenti sul sistema di accedere alla tua chiave privata.

Distribuire la Tua Chiave Pubblica su un Server

Una volta generata la tua coppia di chiavi SSH, devi inserire la tua chiave pubblica sul server o sui server remoti a cui desideri accedere.

Usare ssh-copy-id (Raccomandato)

ssh-copy-id è uno script utility che semplifica il processo di copia della tua chiave pubblica su un server remoto. Aggiunge automaticamente la tua chiave pubblica al file ~/.ssh/authorized_keys sul server e imposta i permessi corretti.

Per usare ssh-copy-id, esegui il seguente comando dalla tua macchina locale:

ssh-copy-id utente@host_remoto

Sostituisci utente con il tuo nome utente sul server remoto e host_remoto con l'indirizzo IP o il nome host del server. Ti verrà chiesta la password dell'utente sull'host_remoto un'ultima volta per autorizzare il trasferimento della chiave.

Se stai usando una porta SSH non standard (ad esempio, 2222), puoi specificarla con l'opzione -p:

ssh-copy-id -p 2222 utente@host_remoto

Distribuzione Manuale (Se ssh-copy-id non è disponibile)

Se ssh-copy-id non è disponibile, puoi copiare manualmente la tua chiave pubblica. Prima, visualizza il contenuto della tua chiave pubblica sulla tua macchina locale:

cat ~/.ssh/id_ed25519.pub

Copia l'intero output. Quindi, connettiti tramite SSH al tuo server remoto usando la tua password:

ssh utente@host_remoto

Una volta effettuato l'accesso, crea la directory .ssh se non esiste, quindi crea o aggiungi al file authorized_keys:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Ora, incolla il contenuto della tua chiave pubblica nel file authorized_keys. Puoi farlo usando un editor di testo come nano o vim:

nano ~/.ssh/authorized_keys

Incolla la chiave pubblica copiata su una nuova riga. Salva ed esci dall'editor.

Infine, assicurati che il file authorized_keys abbia i permessi corretti:

chmod 600 ~/.ssh/authorized_keys

Dopo aver completato questi passaggi, dovresti essere in grado di connetterti al server tramite SSH senza password.

Connettersi con le Chiavi SSH

Una volta che la tua chiave pubblica è sul server, puoi connetterti usando la tua chiave privata. Il client SSH proverà automaticamente a usare le chiavi trovate in ~/.ssh/.

ssh utente@host_remoto

Se hai usato una passphrase durante la generazione della chiave, ti verrà chiesto di inserirla ora. Se non hai usato una passphrase, verrai connesso direttamente.

Specificare una Chiave Diversa

Se hai più coppie di chiavi SSH o la tua chiave non si trova nella posizione predefinita, puoi specificare quale chiave privata usare con l'opzione -i:

ssh -i /percorso/della/tua/chiave_privata utente@host_remoto

Gestire le Chiavi SSH

Man mano che accedi a più server, accumulerai più chiavi SSH. Una gestione efficace è fondamentale per mantenere sicurezza e comodità.

SSH Agent

L'SSH agent è un programma in background che mantiene le tue chiavi private in memoria, decriptate con la tua passphrase. Questo ti permette di usare le tue chiavi per più connessioni SSH senza dover reinserire la passphrase ogni volta.

  • Avviare l'SSH Agent: L'agent viene spesso avviato automaticamente quando accedi al tuo ambiente desktop. In caso contrario, puoi avviarlo manualmente:
    eval "$(ssh-agent -s)"
    
  • Aggiungere Chiavi all'Agent: Una volta che l'agent è in esecuzione, aggiungi la tua chiave o le tue chiavi private:
    ssh-add ~/.ssh/id_ed25519
    
    Ti verrà chiesta la tua passphrase. Dopo di ciò, l'agent gestirà la chiave e le successive connessioni SSH la useranno automaticamente.

File di Configurazione SSH (~/.ssh/config)

Il file di configurazione del client SSH (~/.ssh/config) ti permette di definire alias per gli host e specificare parametri di connessione, inclusa quale chiave usare per un host specifico. Questo è estremamente utile per gestire più server.

Crea o modifica il file ~/.ssh/config sulla tua macchina locale e aggiungi voci come questa:

# Impostazioni predefinite
Host *
  ServerAliveInterval 60

# Server 1: Web Server
Host webserver
  HostName 192.168.1.100
  User webadmin
  Port 2222
  IdentityFile ~/.ssh/webserver_key

# Server 2: Database Server
Host dbserver
  HostName db.example.com
  User dbuser
  IdentityFile ~/.ssh/db_key

Con questa configurazione, puoi connetterti al web server usando:

ssh webserver

E al database server usando:

ssh dbserver

Il client SSH userà automaticamente il nome utente, la porta e il file della chiave privata corretti come definito nel file ~/.ssh/config. Evita di abilitare ForwardAgent yes a livello globale; l'inoltro dell'agent è utile per alcuni flussi di lavoro con host di salto, ma espone il socket del tuo agent all'host remoto mentre la sessione è attiva.

Rotazione e Revoca delle Chiavi

  • Rotazione: Considera regolarmente la rotazione delle tue chiavi SSH, specialmente per sistemi altamente sensibili. Questo comporta la generazione di nuove chiavi e la sostituzione delle vecchie chiavi pubbliche sui server.
  • Revoca: Se una chiave privata viene compromessa o non hai più bisogno di accesso, devi rimuovere la corrispondente chiave pubblica da tutti i file authorized_keys sui server in cui era stata distribuita. Questo è fondamentale per mantenere la sicurezza.

Best Practice e Consigli di Sicurezza

  • Usa Passphrase: Proteggi sempre le tue chiavi private con passphrase forti. Questa è la tua difesa principale contro l'uso non autorizzato se il file della chiave privata viene rubato.
  • Proteggi i Permessi della Chiave Privata: Assicurati che il file della tua chiave privata abbia permessi 600 (-rw-------).
  • Usa ssh-agent: Sfrutta l'SSH agent per evitare di digitare ripetutamente la tua passphrase.
  • Disabilita l'Autenticazione tramite Password: Una volta che l'autenticazione tramite chiave SSH funziona, considera di disabilitare l'autenticazione basata su password sui tuoi server per un ulteriore livello di sicurezza.
  • Mantieni le Chiavi Aggiornate: Usa algoritmi moderni e forti come Ed25519. Evita chiavi RSA più vecchie senza una lunghezza di bit sufficiente (almeno 4096).
  • Fai Attenzione a authorized_keys: Aggiungi solo chiavi pubbliche da fonti fidate al tuo file authorized_keys.
  • Audit Regolari: Controlla periodicamente i file authorized_keys sui tuoi server per assicurarti che siano presenti solo chiavi autorizzate.

Conclusione

Le chiavi SSH valgono la pena di essere configurate prima di aver bisogno di accesso di emergenza al server. Genera una chiave moderna, proteggi la chiave privata con una passphrase, copia solo la chiave pubblica sui server e rimuovi le chiavi obsolete da authorized_keys quando l'accesso cambia.