Come aggiungere una chiave SSH a GitHub

Genera una chiave con ssh-keygen -t ed25519 -C "you@example.com" e copia il contenuto di ~/.ssh/id_ed25519.pub. Su GitHub apri Settings, SSH and GPG keys, New SSH key, incollala e salva. Prova con ssh -T git@github.com: se funziona dice Hi USERNAME! You've successfully authenticated.

Aggiornata il . Fingerprint delle chiavi host di GitHub confrontati con quelli ricevuti da github.com con ssh-keyscan il 2026-11-14.

Genera una chiave

Salta questo passaggio se ne hai già una, cosa che vedi con ls ~/.ssh/*.pub.

ssh-keygen -t ed25519 -C "you@example.com"

Accetta il file predefinito e imposta una passphrase. Su Windows, vedi generare una chiave su Windows.

Non sai che tipo scegliere? Vedi chiavi SSH RSA o ed25519.

Copia la chiave pubblica

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

Su Windows usa Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. È una sola riga che inizia con ssh-ed25519. Se quello che hai inizia con -----BEGIN, è la chiave privata, quindi fermati e non incollarla da nessuna parte.

Aggiungila su GitHub

  1. Clicca la tua immagine del profilo in alto a destra, poi Settings.
  2. Nella sezione Access della barra laterale, clicca SSH and GPG keys.
  3. Clicca New SSH key.
  4. Dagli un titolo che indichi la macchina, come "Personal laptop".
  5. Scegli il tipo di chiave Authentication. Signing è un uso separato: per firmare i commit con la stessa chiave, caricala una seconda volta come Signing.
  6. Incolla la chiave senza aggiungere interruzioni di riga e clicca Add SSH key.

Con lo strumento a riga di comando di GitHub, dopo gh auth login:

gh ssh-key add ~/.ssh/id_ed25519.pub --title "Personal laptop"

GitHub non accetta più le chiavi DSA. Se un'organizzazione di cui fai parte usa il single sign-on SAML, potresti dover autorizzare la chiave anche per quella, nella stessa pagina.

Provala e controlla il fingerprint

ssh -T git@github.com

La prima volta, ssh chiede se fidarsi dell'host. Confronta ciò che mostra con l'elenco che pubblica GitHub. Abbiamo verificato che questi valori corrispondono a ciò che invia github.com:

TipoFingerprint SHA256
Ed25519SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
ECDSASHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
RSASHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s

GitHub può cambiarli, quindi il riferimento è la sua pagina. Un login riuscito stampa:

Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.

Se ottieni invece un errore, vedi git@github.com: Permission denied (publickey).

Perché ssh chiede conferma la prima volta, e come leggere la domanda: known_hosts e fingerprint dell'host spiegati.

Fai usare SSH al tuo repository

Una chiave non serve a nulla per un repository clonato via HTTPS. Controlla, e se serve cambia:

git remote -v
git remote set-url origin git@github.com:OWNER/REPO.git

Per un nuovo clone, usa la stessa forma di indirizzo:

git clone git@github.com:OWNER/REPO.git

Se Git chiede la passphrase o usa la chiave sbagliata

Carica la chiave in ssh-agent una volta per sessione con ssh-add ~/.ssh/id_ed25519. Su Mac il Portachiavi può conservare la passphrase anche dopo un riavvio: vedi ssh-agent e il Portachiavi di macOS.

Se la tua chiave ha un altro nome, indica a ssh quale usare per GitHub in ~/.ssh/config:

Host github.com
    IdentityFile ~/.ssh/id_ed25519_github
    IdentitiesOnly yes

Per un secondo account GitHub sullo stesso computer, vedi più account GitHub con SSH.

Se la porta 22 è bloccata

Alcune reti la bloccano, e si vede come un timeout. GitHub accetta SSH anche sulla porta 443:

ssh -T -p 443 git@ssh.github.com

Se funziona, rendilo permanente in ~/.ssh/config:

Host github.com
    Hostname ssh.github.com
    Port 443
    User git

Domande

Perché ssh -T git@github.com esce con un codice di errore?

Esce con il codice 1 anche in caso di successo, perché GitHub non fornisce una shell. Conta il messaggio Hi USERNAME.

Posso usare la stessa chiave su due account GitHub?

No. GitHub identifica il tuo account dalla chiave e rifiuta una chiave già in uso con Key already in use. Vedi la guida sugli account GitHub multipli.

Perché Git mi chiede la passphrase della chiave SSH a ogni push?

Perché la chiave non è caricata in ssh-agent. Esegui ssh-add ~/.ssh/id_ed25519 una volta per sessione. Su Mac, ssh-add --apple-use-keychain salva anche la passphrase nel Portachiavi.

Fonti

Altro in Chiavi e accesso

Tutte le guide