Il comando
ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINH9eelf0P7eT5ue6SualUXFrh1c9p3Maaem93iZtC2Q you@laptop
Stampa la chiave a schermo. Per rimetterla nel suo file, manda lì l'output:
ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub
Lo stesso comando funziona con una chiave .pem scaricata da un provider cloud, come una coppia di chiavi AWS: ssh-keygen -y -f key.pem.
Per rimettere la chiave su un server, vedi come funziona authorized_keys.
Cosa può andare storto
- Hai dimenticato la passphrase. Ottieni
Load key "id_ed25519": incorrect passphrase supplied to decrypt private key. Senza la passphrase non c'è modo di aggirarlo. Crea una nuova chiave. - Il file è leggibile da altri. Ottieni
UNPROTECTED PRIVATE KEY FILEebad permissions. Eseguichmod 600sul file e riprova. - Hai indicato il file sbagliato.
-yrichiede la chiave privata, non il file.pub. - È un file
.ppk. Usa inveceputtygen key.ppk -L, oppure convertilo prima.
Il commento può mancare
Il nuovo formato OpenSSH conserva il commento dentro la chiave privata, quindi torna nell'output. Una chiave nel vecchio formato, la cui prima riga è BEGIN RSA PRIVATE KEY, non ne ha, e ottieni solo il tipo e la chiave. Funziona altrettanto bene. Aggiungi a mano un commento alla fine della riga se lo vuoi.
Verificare che un file .pub corrisponda a una chiave privata
ssh-keygen -lf non è un controllo affidabile per questo. Data una chiave privata con accanto un file .pub, legge il file .pub, quindi mostra l'impronta sbagliata se i due non appartengono insieme. L'abbiamo confermato con una coppia non corrispondente. Confronta invece le chiavi vere:
diff <(ssh-keygen -y -f ~/.ssh/id_ed25519 | cut -d' ' -f1,2) <(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub) && echo same
Funziona in bash e zsh. Stampa same quando coincidono e mostra la differenza quando non coincidono. Il cut lascia il commento fuori dal confronto.
Domande
Si può ricavare la chiave privata dalla pubblica?
No. La chiave pubblica si calcola dalla privata e il calcolo non si può invertire. Se la privata è persa, genera una nuova coppia.
Perché ssh-keygen -y chiede la passphrase?
La chiave privata è cifrata con la passphrase, e ssh-keygen deve decifrarla per calcolare la parte pubblica. Senza passphrase non si può ottenerla.
Conta il commento alla fine della riga .pub?
No. È solo un'etichetta, per esempio you@laptop. I server lo ignorano, quindi una chiave pubblica senza commento funziona allo stesso modo.