Guida passo passo all'autenticazione sicura basata su chiavi SSH
Secure Shell (SSH) è la spina dorsale dell'amministrazione remota dei sistemi, in quanto consente un accesso sicuro ai server su una rete non protetta. Sebbene l'autenticazione basata su password sia comune, è intrinsecamente vulnerabile agli attacchi di forza bruta e al credential stuffing. L'autenticazione basata su chiavi SSH offre un'alternativa molto più robusta e sicura, sfruttando coppie di chiavi crittografiche per verificare l'identità senza trasmettere password.
Questa guida ti accompagnerà attraverso l'intero processo di configurazione dell'autenticazione sicura basata su chiavi SSH. Imparerai come generare la tua coppia di chiavi SSH, distribuire in modo sicuro la tua chiave pubblica su un server remoto e, cosa fondamentale, rafforzare la configurazione SSH del tuo server disabilitando i login tramite password meno sicuri. Seguendo questi passaggi, migliorerai significativamente la postura di sicurezza del tuo accesso remoto, rendendo i tuoi sistemi più resilienti contro i vettori di attacco comuni.
Comprensione dell'autenticazione basata su chiavi SSH
L'autenticazione basata su chiavi SSH 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 ed è collocata 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ù conveniente, poiché elimina la necessità di digitare una password per ogni connessione una volta configurato correttamente.
Passo 1: Generazione della coppia di chiavi SSH
L'utility ssh-keygen viene utilizzata per creare nuove coppie di chiavi SSH. Si consiglia di utilizzare algoritmi moderni e robusti come ED25519.
Scegliere un tipo e una robustezza della chiave
Sebbene le chiavi RSA siano ancora ampiamente utilizzate, ED25519 offre una sicurezza eccellente con lunghezze di chiave inferiori e operazioni più veloci. Per le nuove configurazioni, ED25519 è generalmente preferito.
Generare 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à la posizione in cui salvare la chiave e una passphrase facoltativa.
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...
Impostare una passphrase robusta (Altamente raccomandato)
Quando richiesto, imposta sempre una passphrase robusta per la tua chiave privata. Questa passphrase cripta la tua chiave privata sulla tua macchina locale, fornendo un ulteriore livello di sicurezza. Se la tua chiave privata dovesse finire nelle mani sbagliate, sarebbe inutile senza la passphrase. Puoi usare ssh-agent per evitare di digitare la passphrase ripetutamente (vedi Passo 4).
Posizioni dei file chiave
Per impostazione predefinita, ssh-keygen salva la chiave privata in ~/.ssh/id_ed25519 e la chiave pubblica in ~/.ssh/id_ed25519.pub.
Permessi per la chiave privata
È fondamentale che il file della chiave privata abbia permessi molto rigidi. Solo il proprietario dovrebbe essere in grado di leggerlo. ssh-keygen di solito lo imposta correttamente, ma è bene verificarlo:
chmod 600 ~/.ssh/id_ed25519
Passo 2: Distribuzione della chiave pubblica sul server
Una volta generata la coppia di chiavi, la chiave pubblica deve essere copiata sul server remoto a cui si desidera accedere. Dovrebbe essere inserita in un file chiamato authorized_keys all'interno della directory ~/.ssh/ del tuo utente sul server remoto.
Metodo 1: Utilizzo di ssh-copy-id (Consigliato)
ssh-copy-id è il metodo più semplice e sicuro. Accede al server remoto (utilizzando la 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 user@your_server_ip
Sostituisci user con il tuo nome utente sul server remoto e your_server_ip con l'indirizzo IP o l'hostname del server. Ti verrà richiesta la password sul server remoto.
Metodo 2: Copia manuale
Se ssh-copy-id non è disponibile, puoi copiare la chiave pubblica manualmente.
-
Copia il contenuto della chiave pubblica dalla tua macchina locale:
bash cat ~/.ssh/id_ed25519.pub
Copia l'intero output negli appunti (inizia conssh-ed25519 ...). -
Accedi al server remoto utilizzando la tua password:
bash ssh user@your_server_ip -
Crea la directory
~/.sshse non esiste e imposta i permessi:
bash mkdir -p ~/.ssh chmod 700 ~/.ssh -
Aggiungi la tua chiave pubblica a
authorized_keys:
bash echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
Assicurati di sostituirePASTE_YOUR_PUBLIC_KEY_HEREcon il contenuto effettivo che hai copiato. L'uso di>>(append) è importante per evitare di sovrascrivere le chiavi esistenti, se ce ne sono. -
Imposta i permessi corretti per
authorized_keys:
bash chmod 600 ~/.ssh/authorized_keys- Attenzione: Permessi errati su
~/.ssho~/.ssh/authorized_keysimpediranno il funzionamento dell'autenticazione basata su chiavi.
- Attenzione: Permessi errati su
Passo 3: Prova l'autenticazione basata su chiavi SSH
Prima di procedere alla disabilitazione dell'autenticazione tramite password, è assolutamente fondamentale verificare che l'autenticazione basata su chiavi funzioni correttamente. Effettua il logout dal server remoto se sei ancora connesso dai passaggi di copia manuale.
Dalla tua macchina locale, tenta di connetterti al server senza specificare una password:
ssh user@your_server_ip
- Se hai impostato una passphrase per la tua chiave privata, ti verrà chiesto di inserirla.
- Se la connessione ha successo senza richiedere la password (dopo la passphrase, se applicabile), l'autenticazione basata su chiavi funziona. Dovresti vedere il prompt del server remoto.
NON procedere al Passo 4 se non riesci ad accedere utilizzando la tua chiave SSH. Risolvi eventuali problemi prima di disabilitare l'autenticazione tramite password, o rischi di bloccarti fuori dal server.
Passo 4: Miglioramento della sicurezza - Disabilitazione dell'autenticazione tramite password
Una volta confermato che l'autenticazione basata su chiavi SSH funziona, puoi disabilitare gli accessi tramite password sul tuo server per migliorare significativamente la sicurezza. Ciò impedisce attacchi di forza bruta contro la tua password e assicura che solo coloro che possiedono chiavi SSH valide possano accedere al server.
-
Accedi al tuo server remoto utilizzando la tua chiave SSH.
bash ssh user@your_server_ip -
Modifica il file di configurazione del demone SSH. Questo file si trova tipicamente in
/etc/ssh/sshd_config.
bash sudo nano /etc/ssh/sshd_config
(Puoi usarevio il tuo editor di testo preferito al posto dinano.) -
Individua e modifica le seguenti direttive:
-
Trova
PasswordAuthenticatione cambia il suo valore inno.
#PasswordAuthentication yes PasswordAuthentication no
(Decommenta la riga se è commentata con#) -
Trova
ChallengeResponseAuthenticatione cambia il suo valore inno.
#ChallengeResponseAuthentication yes ChallengeResponseAuthentication no -
(Facoltativo ma consigliato) Considera di disabilitare l'accesso root direttamente tramite SSH se hai intenzione di utilizzare
sudodopo aver effettuato l'accesso come utente normale.
PermitRootLogin no -
(Facoltativo) Considera di cambiare la porta SSH predefinita da
22a una porta alta non standard (es.2222). Questo non aggiunge sicurezza contro attacchi mirati, ma può ridurre il rumore degli scanner di porte automatizzati.
#Port 22 Port 2222
Se cambi la porta, ricordati di specificarla con il flag-pdurante la connessione (es.ssh -p 2222 user@your_server_ip).
-
-
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 (es. Ubuntu/Debian rispetto a CentOS/RHEL).
-
Sistemi basati su Systemd (la maggior parte delle distribuzioni Linux moderne):
bash sudo systemctl restart sshd -
Sistemi più vecchi basati su SysVinit:
bash sudo service ssh restart
-
-
Fondamentale, apri una nuova finestra del terminale (non chiudere la sessione SSH attiva corrente!) e tenta di accedere utilizzando la tua chiave. Questo testa la nuova configurazione senza bloccarti fuori nel caso qualcosa sia andato storto.
bash ssh user@your_server_ip
Se hai cambiato la porta:
bash ssh -p 2222 user@your_server_ipSe la connessione ha successo, 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 il servizio SSH, quindi rivaluta.
Best Practice e Suggerimenti
- Utilizza sempre una passphrase robusta 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 sui 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 consente di caricare le tue chiavi private in memoria e digitare la passphrase una sola 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 stata compromessa.
- Limita
PermitRootLoginanooprohibit-password. Generalmente è meglio accedere come utente normale e utilizzaresudoper le attività amministrative. - Configura un firewall. Assicurati che solo le porte necessarie (come la porta SSH) siano aperte verso Internet. Strumenti come
ufwofirewalldpossono aiutare.
Conclusione
Seguendo questa guida passo passo, hai configurato e protetto con successo l'autenticazione basata su chiavi SSH per il tuo server remoto. Hai generato una robusta coppia di chiavi crittografiche, distribuito la tua chiave pubblica e, cosa più importante, disabilitato gli accessi tramite password meno sicuri. Ciò migliora significativamente la sicurezza del tuo server, rendendolo più resistente ai tentativi di hacking comuni.
Ricorda sempre di proteggere diligentemente la tua chiave privata e la sua passphrase, poiché è ora la credenziale principale per accedere al tuo server. Adotta queste best practice per mantenere una forte postura di sicurezza per tutte le tue esigenze di accesso remoto.