Einen Schlüssel erzeugen
Überspringen Sie das, wenn Sie schon einen haben, was Sie mit ls ~/.ssh/*.pub sehen.
ssh-keygen -t ed25519 -C "you@example.com"
Übernehmen Sie die Standarddatei und setzen Sie eine Passphrase. Für Windows siehe Schlüssel unter Windows erzeugen.
Unsicher, welcher Typ? Siehe SSH-Schlüssel: RSA oder ed25519.
Den öffentlichen Schlüssel kopieren
pbcopy < ~/.ssh/id_ed25519.pub # macOS
cat ~/.ssh/id_ed25519.pub # Linux: copy the output by hand
Unter Windows nutzen Sie Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. Es ist eine Zeile, die mit ssh-ed25519 beginnt. Beginnt das, was Sie haben, mit -----BEGIN, ist das der private Schlüssel: Hören Sie auf und fügen Sie ihn nirgends ein.
Bei GitHub hinzufügen
- Klicken Sie oben rechts auf Ihr Profilbild, dann auf Settings.
- Klicken Sie in der Seitenleiste im Bereich Access auf SSH and GPG keys.
- Klicken Sie auf New SSH key.
- Geben Sie einen Titel, der den Rechner benennt, etwa "Personal laptop".
- Wählen Sie den Schlüsseltyp Authentication. Signing ist ein getrennter Verwendungszweck: Um Commits mit demselben Schlüssel zu signieren, laden Sie ihn ein zweites Mal als Signing hoch.
- Fügen Sie den Schlüssel ohne Zeilenumbrüche ein und klicken Sie auf Add SSH key.
Mit dem Kommandozeilenwerkzeug von GitHub, nach gh auth login:
gh ssh-key add ~/.ssh/id_ed25519.pub --title "Personal laptop"
GitHub akzeptiert keine DSA-Schlüssel mehr. Nutzt eine Organisation, der Sie angehören, SAML Single Sign-on, müssen Sie den Schlüssel auf derselben Seite eventuell zusätzlich dafür autorisieren.
Testen und den Fingerprint prüfen
ssh -T git@github.com
Beim ersten Mal fragt ssh, ob dem Host vertraut werden soll. Vergleichen Sie, was angezeigt wird, mit der von GitHub veröffentlichten Liste. Wir haben geprüft, dass diese Werte mit dem übereinstimmen, was github.com sendet:
| Typ | SHA256-Fingerprint |
|---|---|
| Ed25519 | SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU |
| ECDSA | SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM |
| RSA | SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s |
GitHub kann diese ändern, maßgeblich ist also die eigene Seite von GitHub. Eine erfolgreiche Anmeldung gibt aus:
Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
Erhalten Sie stattdessen einen Fehler, siehe git@github.com: Permission denied (publickey).
Warum ssh beim ersten Mal fragt und wie Sie die Frage lesen: known_hosts und Host-Fingerprints erklärt.
Ihr Repository auf SSH umstellen
Ein Schlüssel nützt einem über HTTPS geklonten Repository nichts. Prüfen Sie es und stellen Sie bei Bedarf um:
git remote -v
git remote set-url origin git@github.com:OWNER/REPO.git
Für einen neuen Klon verwenden Sie dieselbe Form der Adresse:
git clone git@github.com:OWNER/REPO.git
Wenn Git nach der Passphrase fragt oder den falschen Schlüssel nimmt
Laden Sie den Schlüssel einmal pro Sitzung mit ssh-add ~/.ssh/id_ed25519 in den ssh-agent. Auf dem Mac kann der Schlüsselbund die Passphrase über Neustarts hinweg behalten: siehe ssh-agent und der macOS-Schlüsselbund.
Heißt Ihr Schlüssel anders, sagen Sie ssh in ~/.ssh/config, welchen es für GitHub nehmen soll:
Host github.com
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
Für ein zweites GitHub-Konto auf demselben Rechner siehe mehrere GitHub-Konten mit SSH.
Wenn Port 22 blockiert ist
Manche Netzwerke blockieren ihn, was sich als Timeout zeigt. GitHub akzeptiert SSH auch auf Port 443:
ssh -T -p 443 git@ssh.github.com
Funktioniert das, machen Sie es dauerhaft in ~/.ssh/config:
Host github.com
Hostname ssh.github.com
Port 443
User git
Fragen
Warum beendet sich ssh -T git@github.com mit einem Fehlercode?
Es beendet sich auch bei Erfolg mit Code 1, weil GitHub keine Shell bereitstellt. Entscheidend ist die Meldung Hi USERNAME.
Kann ich denselben Schlüssel bei zwei GitHub-Konten verwenden?
Nein. GitHub erkennt Ihr Konto am Schlüssel und weist einen bereits verwendeten Schlüssel mit Key already in use ab. Siehe die Anleitung zu mehreren GitHub-Konten.
Warum fragt Git bei jedem Push nach meiner SSH-Passphrase?
Weil der Schlüssel nicht im ssh-agent geladen ist. Führen Sie einmal pro Sitzung ssh-add ~/.ssh/id_ed25519 aus. Auf dem Mac speichert ssh-add --apple-use-keychain die Passphrase zusätzlich im Schlüsselbund.
Quellen
- Adding a new SSH key to your GitHub account, GitHub Docs
- Testing your SSH connection, GitHub Docs
- SSH-Schlüssel-Fingerprints von GitHub, GitHub Docs
- SSH über den HTTPS-Port nutzen, GitHub Docs