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.