Guida per Principianti alle Chiavi SSH: Genera, Usa e Gestisci in Sicurezza
Secure Shell (SSH) è lo standard di fatto per l'accesso remoto sicuro a server e altri dispositivi di rete. Sebbene l'autenticazione basata su password sia comune, può essere vulnerabile ad attacchi a forza bruta e richiede la memorizzazione di password complesse. Le chiavi SSH offrono un'alternativa più robusta e conveniente, consentendo l'autenticazione senza password e migliorando la tua postura di sicurezza complessiva.
Questa guida ti accompagnerà attraverso i passaggi essenziali per generare, distribuire e gestire le coppie di chiavi SSH. Comprendendo e implementando queste pratiche, potrai migliorare significativamente la sicurezza del tuo accesso remoto e ottimizzare il tuo flusso di lavoro. Tratteremo i concetti fondamentali, i comandi pratici e le migliori pratiche per iniziare con l'autenticazione tramite chiavi SSH.
Comprendere le Coppie di Chiavi SSH
L'autenticazione con chiave SSH si basa su una coppia di chiavi crittografiche: una chiave privata e una chiave pubblica. Queste chiavi sono matematicamente collegate, ma è computazionalmente infattibile derivare la chiave privata dalla chiave pubblica.
- Chiave Privata: Questa chiave deve essere mantenuta segreta e non deve mai essere condivisa. Risiede sulla tua macchina locale e agisce come la 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. Posizionerai 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 tu possieda la chiave privata corrispondente.
Quando tenti di connetterti a un server, si verifica il seguente processo:
- Il tuo client SSH presenta la tua chiave pubblica al server.
- Il server verifica se questa chiave pubblica è autorizzata (cioè, presente nel suo file
authorized_keys). - Se autorizzata, il server invia una sfida al tuo client.
- Il tuo client usa la tua chiave privata per cifrare la sfida e invia la risposta cifrata al server.
- Il server decifra la risposta usando la tua chiave pubblica. Se la decifratura ha successo e corrisponde alla sfida originale, l'autenticazione viene concessa senza la necessità di una password.
Generazione di 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).
Utilizzo di ssh-keygen
Per generare una nuova coppia di chiavi SSH, apri il tuo terminale o 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 algoritmo di crittografia a curva ellittica moderno, altamente sicuro e veloce. Altre opzioni comuni includonorsa(ad esempio,ssh-keygen -t rsa -b 4096per una chiave RSA a 4096 bit).
Dopo aver eseguito il comando, ti verranno poste alcune domande:
- Inserisci il file in cui salvare la chiave (es.
/home/your_user/.ssh/id_ed25519): Premi Invio per accettare la posizione predefinita. Questo creerà due file nella tua directory.ssh:id_ed25519(la tua chiave privata) eid_ed25519.pub(la tua chiave pubblica). - Inserisci passphrase (vuoto per nessuna passphrase): Questo è un passaggio di sicurezza cruciale. L'inserimento di una passphrase cifra la tua chiave privata su disco. Se il file della tua chiave privata dovesse essere compromesso, l'aggressore avrebbe comunque bisogno della passphrase per usarlo. È altamente consigliato usare una passphrase robusta.
- Reinserisci la stessa passphrase: Conferma la tua passphrase.
Comprendere i File di Output
Dopo la generazione, due file verranno creati nella tua directory ~/.ssh/ (o nel percorso specificato):
id_ed25519(oid_rsa): La tua chiave privata. NON CONDIVIDERE MAI QUESTO FILE. Restringi i suoi permessi a sola lettura per il tuo utente.id_ed25519.pub(oid_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 di file corretti. Su Linux/macOS, esegui:
chmod 600 ~/.ssh/id_ed25519
Questo comando limita i permessi di lettura e scrittura solo al proprietario del file, impedendo ad altri utenti sul sistema di accedere alla tua chiave privata.
Distribuzione della Chiave Pubblica a un Server
Una volta generata la tua coppia di chiavi SSH, devi posizionare la tua chiave pubblica sul/sui server remoti a cui desideri accedere.
Utilizzo di ssh-copy-id (Consigliato)
ssh-copy-id è uno script di utilità 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 user@remote_host
Sostituisci user con il tuo nome utente sul server remoto e remote_host con l'indirizzo IP o il nome host del server. Ti verrà chiesta la password di user su remote_host 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 user@remote_host
Distribuzione Manuale (Se ssh-copy-id non è disponibile)
Se ssh-copy-id non è disponibile, puoi copiare manualmente la tua chiave pubblica. Per prima cosa, visualizza il contenuto della tua chiave pubblica sulla tua macchina locale:
cat ~/.ssh/id_ed25519.pub
Copia l'intero output. Quindi, connettiti via SSH al tuo server remoto usando la tua password:
ssh user@remote_host
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 via SSH al server senza una password.
Connessione con Chiavi SSH
Una volta che la tua chiave pubblica è sul server, puoi connetterti usando la tua chiave privata. Il client SSH tenterà automaticamente di usare le chiavi trovate in ~/.ssh/.
ssh user@remote_host
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 /path/to/your/private_key user@remote_host
Gestione delle Chiavi SSH
Man mano che accedi a più server, accumulerai più chiavi SSH. Una gestione efficace è fondamentale per mantenere la sicurezza e la comodità.
Agente SSH
L'agente SSH è un programma in background che mantiene le tue chiavi private in memoria, decifrate con la tua passphrase. Questo ti consente di usare le tue chiavi per più connessioni SSH senza dover reinserire la tua passphrase ogni volta.
- Avvio dell'Agente SSH: L'agente viene spesso avviato automaticamente quando accedi al tuo ambiente desktop. In caso contrario, puoi avviarlo manualmente:
bash eval "$(ssh-agent -s)" - Aggiunta di Chiavi all'Agente: Una volta che l'agente è in esecuzione, aggiungi la/e tua/e chiave/i privata/e:
bash ssh-add ~/.ssh/id_ed25519
Ti verrà chiesta la tua passphrase. Dopodiché, l'agente 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 consente di definire alias per gli host e specificare parametri di connessione, inclusa la chiave da usare per un host specifico. Questo è incredibilmente utile per gestire più server.
Crea o modifica il file ~/.ssh/config sulla tua macchina locale e aggiungi voci come questa:
# Impostazioni predefinite
Host *
ForwardAgent yes
ServerAliveInterval 60
# Server 1: Server Web
Host webserver
HostName 192.168.1.100
User webadmin
Port 2222
IdentityFile ~/.ssh/webserver_key
# Server 2: Server di Database
Host dbserver
HostName db.example.com
User dbuser
IdentityFile ~/.ssh/db_key
Con questa configurazione, puoi connetterti al server web usando:
ssh webserver
E al server di database usando:
ssh dbserver
Il client SSH userà automaticamente il nome utente, la porta e il file della chiave privata corretti come definiti nel file ~/.ssh/config.
Rotazione e Revoca delle Chiavi
- Rotazione: Considera regolarmente la rotazione delle tue chiavi SSH, specialmente per sistemi altamente sensibili. Questo implica la generazione di nuove chiavi e la sostituzione delle vecchie chiavi pubbliche sui server.
- Revoca: Se una chiave privata è compromessa o non hai più bisogno di accedere, devi rimuovere la chiave pubblica corrispondente da tutti i file
authorized_keyssui server in cui è stata distribuita. Questo è fondamentale per mantenere la sicurezza.
Migliori Pratiche e Consigli di Sicurezza
- Usa le Passphrase: Proteggi sempre le tue chiavi private con passphrase robuste. 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'agente SSH per evitare di digitare ripetutamente la tua passphrase. - Disabilita l'Autenticazione con Password: Una volta che l'autenticazione con 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 robusti come Ed25519. Evita le chiavi RSA più vecchie senza una lunghezza di bit sufficiente (almeno 4096).
- Fai Attenzione a
authorized_keys: Aggiungi solo chiavi pubbliche da fonti affidabili al tuo fileauthorized_keys. - Verifiche Regolari: Rivedi periodicamente i file
authorized_keyssui tuoi server per assicurarti che siano presenti solo chiavi autorizzate.
Conclusione
Le chiavi SSH sono uno strumento potente per migliorare la sicurezza e la comodità della gestione dei server remoti. Padroneggiando la generazione, la distribuzione e la gestione delle coppie di chiavi SSH utilizzando strumenti come ssh-keygen e ssh-copy-id, puoi andare oltre l'autenticazione basata su password e stabilire un flusso di lavoro di accesso remoto più sicuro ed efficiente. Ricorda di dare priorità alla sicurezza utilizzando passphrase robuste e proteggendo le tue chiavi private.