Guida passo-passo all'autenticazione SSH sicura basata su chiave
Configura un'autenticazione SSH sicura basata su chiave con chiavi ED25519, authorized_keys, ssh-agent e impostazioni sshd più sicure.
Guida passo-passo all'autenticazione SSH sicura basata su chiave
L'autenticazione SSH basata su chiave protegge il tuo server da molti attacchi basati su password, ma solo se generi la chiave con attenzione, installi la chiave pubblica correttamente e testi l'accesso prima di modificare le impostazioni del server.
Questa guida ti accompagna attraverso la generazione di chiavi ED25519, l'installazione della chiave pubblica, il test di accesso e le impostazioni più sicure del demone SSH.
Comprendere l'autenticazione SSH basata su chiave
L'autenticazione SSH basata su chiave si basa su una coppia di chiavi crittograficamente collegate: una chiave privata e una chiave pubblica.
- Chiave privata: Questa chiave deve rimanere segreta e protetta sulla tua macchina locale. È come una password estremamente complessa che solo tu possiedi.
- Chiave pubblica: Questa chiave può essere condivisa liberamente e viene posizionata sul server remoto a cui desideri accedere. Viene utilizzata dal server per verificare la tua identità.
Quando tenti di connetterti, il server utilizza la tua chiave pubblica per sfidare la tua macchina locale. La tua macchina locale utilizza quindi la sua chiave privata per rispondere a questa sfida, dimostrando la tua identità senza mai inviare la chiave privata sulla rete. Questo metodo non solo è più sicuro, ma anche più comodo, poiché elimina la necessità di digitare una password per ogni connessione una volta configurato correttamente.
Passo 1: Generare la tua coppia di chiavi SSH
L'utilità ssh-keygen viene utilizzata per creare nuove coppie di chiavi SSH. Si consiglia di utilizzare algoritmi moderni e robusti come ED25519.
Scegli un tipo di chiave e una forza
Mentre le chiavi RSA sono ancora ampiamente utilizzate, ED25519 offre un'eccellente sicurezza con lunghezze di chiave più brevi e operazioni più veloci. Per le nuove configurazioni, ED25519 è generalmente preferito.
Genera la coppia di chiavi
Sulla tua macchina locale (client), apri il terminale ed esegui il seguente comando:
ssh-keygen -t ed25519 -C "[email protected]"
-t ed25519: Specifica il tipo di chiave come ED25519.-C "[email protected]": Aggiunge un commento alla chiave pubblica, spesso utilizzato per l'identificazione. Sostituisci con la tua email effettiva o un'etichetta descrittiva.
Il comando ti chiederà una posizione in cui salvare la chiave e una passphrase opzionale.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/tuoutente/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tuoutente/.ssh/id_ed25519
Your public key has been saved in /home/tuoutente/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...
Imposta una passphrase forte (altamente raccomandato)
Quando richiesto, imposta sempre una passphrase forte per la tua chiave privata. Questa passphrase crittografa la tua chiave privata sulla tua macchina locale, fornendo un ulteriore livello di sicurezza. Se la tua chiave privata dovesse mai cadere in mani sbagliate, sarà inutile senza la passphrase. Puoi utilizzare ssh-agent per evitare di digitare la passphrase ripetutamente (vedi Passo 4).
Posizioni dei file delle chiavi
Per impostazione predefinita, ssh-keygen salva la tua chiave privata in ~/.ssh/id_ed25519 e la tua chiave pubblica in ~/.ssh/id_ed25519.pub.
Permessi per la tua chiave privata
È fondamentale che il file della tua chiave privata abbia permessi molto restrittivi. Solo il proprietario dovrebbe essere in grado di leggerlo. ssh-keygen di solito imposta questo correttamente, ma è bene verificare:
chmod 600 ~/.ssh/id_ed25519
Passo 2: Distribuire la tua chiave pubblica al server
Una volta generata la coppia di chiavi, la tua chiave pubblica deve essere copiata sul server remoto a cui desideri accedere. Dovrebbe essere inserita in un file chiamato authorized_keys all'interno della directory ~/.ssh/ del tuo utente sul server remoto.
Metodo 1: Utilizzare ssh-copy-id (Raccomandato)
ssh-copy-id è il metodo più semplice e sicuro. Si connette al server remoto (usando la tua password), crea la directory ~/.ssh se non esiste, imposta i permessi corretti e aggiunge la tua chiave pubblica a ~/.ssh/authorized_keys.
ssh-copy-id utente@ip_del_tuo_server
Sostituisci utente con il tuo nome utente sul server remoto e ip_del_tuo_server con l'indirizzo IP o il nome host del server. Ti verrà chiesta la password sul server remoto.
Metodo 2: Copia manuale
Se ssh-copy-id non è disponibile, puoi copiare manualmente la chiave pubblica.
Copia il contenuto della chiave pubblica dalla tua macchina locale:
cat ~/.ssh/id_ed25519.pubCopia l'intero output negli appunti (inizia con
ssh-ed25519 ...).Accedi al server remoto usando la tua password:
ssh utente@ip_del_tuo_serverCrea la directory
~/.sshse non esiste e imposta i permessi:mkdir -p ~/.ssh chmod 700 ~/.sshAggiungi la tua chiave pubblica a
authorized_keys:echo "INCOLLA_LA_TUA_CHIAVE_PUBBLICA_QUI" >> ~/.ssh/authorized_keysAssicurati di sostituire
INCOLLA_LA_TUA_CHIAVE_PUBBLICA_QUIcon il contenuto effettivo che hai copiato. Usare>>(aggiungi) è importante per evitare di sovrascrivere chiavi esistenti, se presenti.Imposta i permessi corretti per
authorized_keys:chmod 600 ~/.ssh/authorized_keys- Attenzione: Permessi errati su
~/.ssho~/.ssh/authorized_keysimpediranno il funzionamento dell'autenticazione basata su chiave.
- Attenzione: Permessi errati su
Passo 3: Testare la tua autenticazione SSH basata su chiave
Prima di procedere a disabilitare l'autenticazione tramite password, è assolutamente fondamentale verificare che l'autenticazione basata su chiave funzioni correttamente. Esci dal server remoto se sei ancora connesso dai passaggi di copia manuale.
Dalla tua macchina locale, prova a connetterti al server senza specificare una password:
ssh utente@ip_del_tuo_server
- Se hai impostato una passphrase per la tua chiave privata, ti verrà chiesto di inserirla.
- Se la connessione ha successo senza una richiesta di password (dopo la passphrase, se applicabile), la tua autenticazione basata su chiave funziona. Dovresti vedere il prompt del server remoto.
NON procedere al Passo 4 se non riesci ad accedere usando la tua chiave SSH. Risolvi eventuali problemi prima di disabilitare l'autenticazione tramite password, altrimenti rischi di rimanere bloccato fuori dal server.
Passo 4: Migliorare la sicurezza - Disabilitare l'autenticazione tramite password
Una volta confermato che l'autenticazione SSH basata su chiave funziona, puoi disabilitare gli accessi basati su password sul tuo server per migliorare significativamente la sicurezza. Questo impedisce attacchi di forza bruta contro la tua password e garantisce che solo coloro che possiedono chiavi SSH valide possano accedere al server.
Accedi al tuo server remoto usando la tua chiave SSH.
ssh utente@ip_del_tuo_serverModifica il file di configurazione del demone SSH. Questo file si trova tipicamente in
/etc/ssh/sshd_config.sudo nano /etc/ssh/sshd_config(Puoi usare
vio il tuo editor di testo preferito invece dinano.)Trova e modifica le seguenti direttive:
Trova
PasswordAuthenticatione cambia il suo valore inno.#PasswordAuthentication yes PasswordAuthentication no(Rimuovi il commento dalla riga se è commentata con
#)Trova
KbdInteractiveAuthenticatione cambia il suo valore inno. Sulle versioni più vecchie di OpenSSH, la direttiva equivalente potrebbe essereChallengeResponseAuthentication.KbdInteractiveAuthentication no(Opzionale ma raccomandato) Considera di disabilitare l'accesso diretto di root tramite SSH se prevedi di usare
sudodopo aver effettuato l'accesso come utente normale.PermitRootLogin no(Opzionale) Considera di cambiare la porta SSH predefinita da
22a una porta alta non standard (ad esempio,2222). Questo non aggiunge sicurezza contro attacchi mirati ma può ridurre il rumore da scanner di porte automatici.#Port 22 Port 2222Se cambi la porta, ricordati di specificarla con il flag
-pquando ti connetti (ad esempio,ssh -p 2222 utente@ip_del_tuo_server).
Salva le modifiche ed esci dall'editor di testo.
Riavvia il servizio SSH per applicare la nuova configurazione. Il comando varia leggermente a seconda del sistema operativo (ad esempio, Ubuntu/Debian vs. CentOS/RHEL).
Sistemi basati su Systemd (la maggior parte delle distribuzioni Linux moderne):
sudo sshd -t sudo systemctl restart sshdSistemi basati su SysVinit più vecchi:
sudo service ssh restart
Fondamentalmente, apri una nuova finestra del terminale (non chiudere la tua sessione SSH attuale!) e prova ad accedere usando la tua chiave. Questo testa la nuova configurazione senza bloccarti se qualcosa è andato storto.
ssh utente@ip_del_tuo_serverSe hai cambiato la porta:
ssh -p 2222 utente@ip_del_tuo_serverSe la connessione ha successo, ora puoi chiudere in sicurezza la tua sessione SSH originale.
Se il nuovo accesso fallisce, ripristina immediatamente le modifiche in
sshd_confignella tua sessione SSH originale ancora attiva e riavvia di nuovo il servizio SSH, quindi rivaluta.
Migliori pratiche e suggerimenti
- Usa sempre una passphrase forte per la tua chiave privata. Questa è la tua ultima linea di difesa se la tua chiave privata viene compromessa.
- Proteggi la tua chiave privata. Non condividerla mai e assicurati che sia archiviata in modo sicuro con permessi di file rigorosi (
chmod 600 ~/.ssh/id_ed25519). Considera moduli di sicurezza hardware (HSM) o YubiKeys per la massima protezione. - Usa
ssh-agentper comodità.ssh-agentti permette di caricare la tua chiave o le tue chiavi private in memoria e digitare la passphrase solo una volta per sessione, anche attraverso più connessioni SSH. Aggiungi la tua chiave all'agente conssh-add ~/.ssh/id_ed25519. - Ruota regolarmente le tue chiavi SSH. Genera periodicamente nuove coppie di chiavi e rimuovi le vecchie chiavi pubbliche dai tuoi server, specialmente se un membro del team lascia o si sospetta che la sicurezza di una chiave sia compromessa.
- Limita
PermitRootLoginanooprohibit-password. È generalmente meglio accedere come utente normale e usaresudoper le attività amministrative. - Configura un firewall. Assicurati che solo le porte necessarie (come la tua porta SSH) siano aperte a Internet. Strumenti come
ufwofirewalldpossono aiutare.
Conclusione finale
La tua chiave privata è ora la tua principale credenziale di accesso, quindi proteggila con una passphrase e permessi di file rigorosi. Tieni una sessione SSH testata aperta mentre modifichi sshd_config, convalida la configurazione con sshd -t e chiudi la vecchia sessione solo dopo che un nuovo accesso basato su chiave funziona.