git push scheitert mit 'Permission denied (publickey)'? So erstellst du einen SSH-Schlüssel, lädst ihn hoch und testest die Verbindung.
Aufwand:
ca. 15 Min.
Das Symptom
Du willst pushen oder klonen und Git blockt sofort ab:
git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Kein Passwort-Prompt, keine zweite Chance – die Tür geht
gar nicht erst auf, obwohl das Repository dir gehört.
Die „Layer 8“-Wahrheit
„Permission denied (publickey)“ ist erfreulich präzise: Es ist kein
Netzwerkproblem, sondern reine Authentifizierung. Der Server hat gefragt
„beweise, wer du bist“, und dein Rechner hatte keinen passenden SSH-Schlüssel
vorzuzeigen – entweder existiert gar keiner, oder er liegt nicht beim Dienst
hinterlegt, oder der SSH-Agent bietet ihn nicht an. Der häufigste Layer-8-Moment:
Man hat den Schlüssel zwar erzeugt, aber den öffentlichen Teil nie bei GitHub
eingefügt – und wundert sich, dass GitHub einen nicht kennt. Ein Schlüsselpaar,
ein Copy-and-paste in die Kontoeinstellungen, ein Testbefehl – und die Tür
öffnet sich.
Die echte, verifizierte Lösung
1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:
1.
Vorhandene Schlüssel prüfen
Zuerst nachsehen, ob bereits ein SSH-Schlüsselpaar existiert:
ls -al ~/.ssh
2.
Neuen SSH-Schlüssel erzeugen
Fehlt ein Schlüssel, ein modernes ed25519-Paar mit der eigenen E-Mail erstellen (bei den Abfragen Enter für Standardpfad):
ssh-keygen -t ed25519 -C "deine@email.de"
3.
Schlüssel zum SSH-Agenten hinzufügen
Den Agenten starten und den privaten Schlüssel laden, damit Git ihn automatisch anbietet:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
4.
Öffentlichen Schlüssel beim Dienst hinterlegen
Den Inhalt des öffentlichen Schlüssels anzeigen, vollständig kopieren und bei GitHub/GitLab unter 'Settings › SSH and GPG keys › New SSH key' einfügen:
cat ~/.ssh/id_ed25519.pub
5.
Verbindung testen und Remote-URL prüfen
Die Authentifizierung testen. Schlägt es weiter fehl, ist die Remote-URL evtl. auf HTTPS statt SSH gesetzt – dann auf die SSH-URL umstellen:
?Was bedeutet 'Permission denied (publickey)' bei Git?
Der Server (z. B. GitHub) hat deinen SSH-Schlüssel nicht akzeptiert – meist weil kein passender Schlüssel existiert, er nicht beim Dienst hinterlegt ist oder der SSH-Agent ihn nicht anbietet. Es ist ein Authentifizierungs-, kein Netzwerkproblem.
?Wie teste ich, ob mein SSH-Schlüssel bei GitHub funktioniert?
Mit 'ssh -T git@github.com'. Bei Erfolg begrüßt dich GitHub mit deinem Benutzernamen und dem Hinweis, dass Shell-Zugriff nicht möglich ist – das ist die erwartete, korrekte Antwort.
Belege
Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.
git stoppt mit 'Your local changes would be overwritten by merge/checkout'? So rettest du deine Änderungen per commit oder stash, statt sie zu verlieren.