Autenticazione SSH tramite chiavi (public key authentication)
L’uso di autenticazione tramite chiavi SSH sostituisce le password, riducendo significativamente il rischio di accessi forzati (brute force) o violazioni derivanti da credenziali deboli. OpenSSH, molto usato su Linux e Unix, supporta nativamente le chiavi pubbliche e permette di disabilitare le password una volta che il sistema è configurato correttamente. Questa configurazione, se gestita bene, aumenta la sicurezza dell’accesso remoto.
Nel 2023 è stato illustrato l’attacco “Terrapin”, che manipola l’integrità del canale SSH in certe modalità cifrate, rendendo possibile il downgrade degli algoritmi di autenticazione via exploit dei numeri di sequenza dei pacchetti. Questo dimostra l’importanza di configurare algoritmi moderni, aggiornare OpenSSH e ridurre la superficie d’attacco attiva (es. disabilitando metodi in chiaro).
Generazione della coppia di chiavi
Scelta dell’algoritmo
Nelle versioni moderne di OpenSSH (Ubuntu 22.04+), è consigliabile usare algoritmi robusti come ed25519 o ECDSA invece di RSA con lunghezze minime (es. RSA 2048). Le versioni recenti includono patch di sicurezza senza compromettere la compatibilità.
Comando di generazione
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 -C "nome_utente@host"
-a 100 indica il numero di iterazioni di derivazione (utile se la chiave è protetta da passphrase)
Il file con estensione .pub è la chiave pubblica; il file senza estensione è la chiave privata
Protezione della chiave privata
Si consiglia fortemente di usare una passphrase. Per rimuoverla successivamente:
ssh-keygen -p -f ~/.ssh/id_ed25519
Lasciare vuoto il campo nuovo per rimuovere la passphrase.
Backup sicuro
La chiave privata va conservata in un luogo sicuro (hardware protetto, backup cifrato). La chiave pubblica può essere replicata sui server target.
Distribuzione della chiave pubblica sul server
Preparare la cartella .ssh
Sul server, nella home dell’utente target:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Inserimento della chiave pubblica
Usare ssh-copy-id o metodi manuali:
ssh-copy-id -i ~/.ssh/id_ed25519.pub utente@server
In alternativa, copiare manualmente il contenuto del file .pub e appenderlo a ~/.ssh/authorized_keys:
cat id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Verifica di accesso
Chiudere la sessione SSH corrente e tentare un nuovo accesso:
ssh utente@server
Il client dovrebbe autenticarsi tramite la chiave, senza chiedere la password dell’utente (ma potrebbe richiedere la passphrase locale della chiave).
Uso di ssh-agent / caching della passphrase
Per evitare di digitare la passphrase ad ogni sessione:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Configurazione del server SSH (sshd) per disabilitare le password
Dopo aver verificato che l’autenticazione a chiave funziona correttamente, si può modificare il demone SSH per disabilitare l’autenticazione con password, riducendo il vettore d’attacco.
Backup del file di configurazione
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Modifiche chiave in /etc/ssh/sshd_config
Le direttive da impostare (o modificare):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PermitRootLogin prohibit-password
PubkeyAuthentication yes abilita l’autenticazione a chiave
PasswordAuthentication no disabilita l’autenticazione con password
ChallengeResponseAuthentication no disabilita modalità challenge-response
UsePAM no disabilita PAM se interferisce con l’autenticazione
PermitRootLogin prohibit-password consente login root solo con chiave
Si possono anche specificare policy più restrittive:
AllowUsers utente1 utente2
PermitEmptyPasswords no
Controllo della configurazione
sudo sshd -t
Riavvio del servizio SSH
sudo systemctl restart sshd
È importante aggiornare costantemente OpenSSH e monitorare i log dei tentativi falliti. In ambienti professionali, politiche di rotazione delle chiavi e aggiornamenti contro attacchi emergenti sono passaggi fondamentali.