Come generare una chiave SSH ed25519

Esegui ssh-keygen -t ed25519 -C "you@laptop", premi Invio per accettare il file predefinito e digita una passphrase. Ottieni una chiave privata in ~/.ssh/id_ed25519 e una chiave pubblica in ~/.ssh/id_ed25519.pub. Sul server va solo la chiave pubblica: installala con ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server, oppure incollala su GitHub.

Aggiornata il . Comandi eseguiti con OpenSSH 10.3 su macOS e OpenSSH 10.0 su Debian 13, compresi ssh-copy-id, ssh-add e la prova di accesso solo con chiave.

Genera la chiave

Prima controlla se ne hai già una con ls ~/.ssh. Se c'è id_ed25519.pub, passa direttamente all'installazione.

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

ssh-keygen fa due domande:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Enter passphrase for "/home/you/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:

Premi Invio per accettare il file predefinito. Se lì esiste già una chiave, digita un percorso diverso come ~/.ssh/id_ed25519_work invece di sovrascriverla.

Il testo dopo -C è un commento che ti aiuta a riconoscere la chiave. Chiunque veda la chiave pubblica può leggerlo, quindi non metterci nulla di privato. Da OpenSSH 9.5 anche un semplice ssh-keygen crea una chiave Ed25519, ma -t ed25519 funziona con ogni versione.

Scegli una passphrase

La passphrase cifra il file della chiave privata. Senza, chiunque copi il file può usarlo. Con la passphrase, gli serve anche quella. Puoi aggiungerla o cambiarla più avanti senza cambiare la chiave:

ssh-keygen -p -f ~/.ssh/id_ed25519

Per non digitarla a ogni connessione, carica la chiave in ssh-agent, come spiegato più sotto.

Installa la chiave pubblica su un server

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server

Entra una volta con la password, aggiunge la chiave pubblica a ~/.ssh/authorized_keys sul server e imposta i permessi giusti. Se ssh-copy-id non c'è, fai la stessa cosa a mano:

cat ~/.ssh/id_ed25519.pub | ssh user@server 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

Su Windows, PowerShell non ha ssh-copy-id e la chiave sta nel profilo utente:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Altri dettagli in ssh-copy-id su Windows.

Prova l'accesso

Questo comando prova solo le chiavi, quindi riesce solo se la chiave funziona:

ssh -o PreferredAuthentications=publickey user@server

Non provare solo con -o PasswordAuthentication=no. Se il server consente il login keyboard-interactive, può comunque chiederti la password in quel modo, e penseresti che la chiave abbia funzionato.

Se fallisce, vedi come risolvere Permission denied (publickey).

Copia la chiave pubblica per GitHub e altri servizi

pbcopy < ~/.ssh/id_ed25519.pub     # macOS
cat ~/.ssh/id_ed25519.pub          # Linux: copy the output

Su Windows esegui Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. La chiave pubblica è una riga sola che inizia con ssh-ed25519. Se vedi -----BEGIN OPENSSH PRIVATE KEY-----, hai aperto la chiave privata: non incollarla da nessuna parte.

I passi successivi per GitHub sono in come aggiungere una chiave SSH a GitHub.

Non digitare più la passphrase

ssh-agent tiene in memoria la chiave sbloccata per tutta la sessione:

ssh-add ~/.ssh/id_ed25519
ssh-add -l

Su Mac la passphrase può restare anche nel Portachiavi dopo un riavvio: vedi ssh-agent e il Portachiavi di macOS. Se ssh-add risponde Could not open a connection to your authentication agent, in quella shell non gira nessun agente: vedi come risolvere questo errore.

Usare una chiave con un altro nome

ssh prova da solo i nomi predefiniti, come id_ed25519. Per una chiave salvata con un altro nome, indicala una volta con -i:

ssh -i ~/.ssh/id_ed25519_work user@server

Oppure assegnala a quel server in ~/.ssh/config, così basta ssh myserver:

Host myserver
    HostName 203.0.113.10
    User user
    IdentityFile ~/.ssh/id_ed25519_work
    IdentitiesOnly yes

Il resto di quel file è spiegato nella guida al file di configurazione SSH.

Perché ed25519

Le chiavi Ed25519 sono corte, veloci e supportate da ogni versione di OpenSSH dalla 6.5, del 2014. Usa RSA solo per raggiungere un sistema o un dispositivo vecchio che non conosce ed25519, e in quel caso con almeno 3072 bit:

ssh-keygen -t rsa -b 4096 -C "you@laptop"

Per un confronto diretto, vedi chiavi SSH RSA o ed25519.

Vedere il fingerprint di una chiave

ssh-keygen -lf ~/.ssh/id_ed25519.pub

Il fingerprint è ciò che confronti per verificare che due copie di una chiave siano uguali, per esempio la chiave elencata su GitHub e quella sul tuo portatile.

Domande

Dove si trova la mia chiave SSH?

Nella cartella .ssh della tua home: ~/.ssh su macOS e Linux, e la cartella .ssh del profilo utente su Windows. id_ed25519 è la chiave privata e id_ed25519.pub quella pubblica.

Ed25519 è meglio di RSA?

Per le chiavi nuove, sì. Le chiavi Ed25519 sono più corte e più veloci, e ogni OpenSSH attuale le supporta. Usa RSA con almeno 3072 bit solo per sistemi vecchi che non conoscono ed25519.

Servono le opzioni -o e -a 100 delle guide più vecchie?

No. -o è accettata ma non fa più nulla: il formato OpenSSH che chiedeva è quello predefinito da OpenSSH 7.8. -a imposta quanti giri proteggono la passphrase, 16 di base. Un numero più alto rallenta chi prova a indovinarla, e rende un po' più lento anche lo sblocco per te.

Ho dimenticato la passphrase. Posso recuperarla?

No. Non c'è modo di leggerla né di azzerarla. Genera una chiave nuova, installa la sua chiave pubblica sui server e togli quella vecchia dai loro file authorized_keys.

Posso usare la stessa chiave su più server?

Sì. La chiave pubblica può stare su quanti server vuoi. Usa chiavi separate dove vuoi poter togliere l'accesso separatamente, per esempio fra server di lavoro e personali.

Fonti

Altro in Chiavi e accesso

Tutte le guide