Perché una password non basta per SSH
Qualsiasi server Linux raggiungibile da internet con accesso SSH via password è costantemente bersaglio di tentativi automatizzati di accesso (bot che provano combinazioni comuni di utente e password, ininterrottamente). Anche con una password robusta, l'autenticazione via password resta intrinsecamente più debole di un'alternativa basata su crittografia a chiave pubblica, che è di fatto lo standard raccomandato per qualsiasi server esposto in produzione.
Come funziona l'autenticazione a chiave
Il meccanismo si basa su una coppia di chiavi generate insieme: una chiave privata, che resta esclusivamente sul computer da cui ci si connette e non va mai condivisa con nessuno, e una chiave pubblica, che si copia sul server nel file ~/.ssh/authorized_keys dell'utente con cui ci si vuole autenticare. Al momento della connessione, il server sfida il client a dimostrare crittograficamente di possedere la chiave privata corrispondente a quella pubblica registrata, senza che la chiave privata debba mai transitare sulla rete.
Generare la coppia di chiavi
Sul proprio computer, il comando ssh-keygen -t ed25519 genera una nuova coppia di chiavi usando l'algoritmo Ed25519 (oggi preferibile al più datato RSA per un miglior compromesso tra sicurezza e prestazioni), chiedendo anche — fortemente consigliata — una passphrase che protegge la chiave privata anche nel caso in cui il file venga sottratto dal proprio computer.
Copiare la chiave pubblica sul server
Il comando ssh-copy-id utente@server automatizza la copia della chiave pubblica sul server, aggiungendola correttamente al file authorized_keys con i permessi appropriati (un dettaglio che, se sbagliato manualmente, spesso impedisce il funzionamento dell'autenticazione). Da questo momento, connettersi con ssh utente@server autentica automaticamente tramite la chiave, senza richiedere la password dell'account.
Disattivare del tutto la password
Una volta verificato che l'accesso tramite chiave funziona correttamente, il passo finale — quello che offre davvero il beneficio di sicurezza — è disattivare l'autenticazione via password sul server: nel file /etc/ssh/sshd_config, impostando PasswordAuthentication no e riavviando il servizio SSH. Da quel momento, un tentativo di accesso senza la chiave corretta viene rifiutato a prescindere da qualsiasi password provata, eliminando di fatto l'intera categoria di attacchi a forza bruta sulla password. È buona norma testare l'accesso via chiave da una seconda sessione prima di chiudere quella corrente: un errore di configurazione a questo punto, senza una sessione di riserva aperta, può significare restare bloccati fuori dal proprio stesso server.