$ man ssh-keygen
[...]
It is possible to specify a passphrase when generating the
key; that passphrase will be used to encrypt the private
part of this file using 128-bit AES.
Quindi questa passphrase crittografa solo la chiave localmente. Un utente malintenzionato con accesso al tuo sistema non sarà in grado di leggere la chiave privata, perché è crittografata. (Potrebbero installare un keylogger, però.) Ad esempio, se il tuo laptop viene rubato, la tua chiave ssh potrebbe essere ancora sicura se hai una passphrase strong. O anche con una passphrase abbastanza debole (a patto che non sia banale), ti acquisterà un po 'di tempo per revocare la chiave e passare a una nuova, prima che gli hacker possano decifrarla.
È facoltativo perché puoi scegliere di accettare il rischio di non averlo crittografato nella memoria. O forse hai la crittografia del disco abilitata, che attenua alcuni degli stessi attacchi (ma non tutti, ad esempio: il malware può ancora rubare la chiave, anche con la crittografia del disco, d'altra parte, un laptop rubato è ancora sicuro se non rubato mentre è in esecuzione con la chiave in memoria).
Il server può richiedere l'uso sia di una chiave pubblica sia di una password per accedere. La sicurezza di questa operazione è diversa dall'utilizzo di una chiave pubblica crittografata con password. Se si utilizza una chiave crittografata, quindi:
- non puoi cambiare la password sul lato server, dovrai generare una nuova chiave;
- qualcuno potrebbe violare la password della chiave inosservata, perché possono farlo offline (se il server richiede una password, devono chiedere al server "è corretto aaaa? aaab è corretto?" ecc.);
- qualcuno può craccare la chiave molto, molto più velocemente perché è un attacco offline senza limitazioni di rete; e
- il server non può utilizzare qualcosa come fail2ban per rifiutare troppi tentativi di accesso, perché il cracking avviene offline.