Una password può essere indovinata mille volte al secondo da una macchina che non dorme mai. Una chiave no: non c'è nulla di abbastanza corto da provare. Il passaggio costa dieci minuti e toglie di mezzo un'intera famiglia di attacchi.

Generi la coppia

ssh-keygen -t ed25519 -C "you@yourmachine"

Ed25519 è il valore predefinito di oggi: corta, veloce e robusta. Le dia una passphrase: se il portatile viene rubato, quella passphrase è l'unica cosa fra il ladro e i suoi server.

Installi la metà pubblica

ssh-copy-id ops@your-server

Questo accoda la chiave pubblica a ~/.ssh/authorized_keys sul server. La metà privata non lascia mai la sua macchina e non deve mai farlo.

La provi in una finestra NUOVA

Non chiuda la sessione in cui si trova. Apra un secondo terminale ed entri con la chiave. Se fallisce, le resta la prima finestra da cui rimediare.
ssh ops@your-server

Poi spenga le password

# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no
# then
systemctl reload ssh

Reload, non restart: il reload tiene vive le sessioni già aperte, così un errore non la butta fuori.

Quando non funziona

  • I permessi. SSH rifiuta le chiavi che stanno in una directory leggibile da altri: chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys
  • L'utente sbagliato. La chiave va nella home dell'utente con cui entra, non in quella di root.
  • Legga il motivo. ssh -v ops@server stampa ogni chiave che offre e perché ciascuna è stata rifiutata.
Una chiave per macchina, non una sola chiave copiata su tutte. Quando si perde un portatile lei toglie una riga sul server, e non cambia nient'altro.