Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: AnfängerfehlerPermission denied (publickey)

Git: Permission denied (publickey) bei push/clone

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. 1.

    Vorhandene Schlüssel prüfen

    Zuerst nachsehen, ob bereits ein SSH-Schlüsselpaar existiert:

    ls -al ~/.ssh
    
  2. 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. 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. 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. 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:

    ssh -T git@github.com
    git remote set-url origin git@github.com:nutzer/repo.git
    

Häufige Fragen (FAQ)

?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.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWAnfängerfehlerfatal: refusing to merge unrelated histories

Git: refusing to merge unrelated histories

git pull scheitert mit 'refusing to merge unrelated histories'? So führst du zwei getrennt entstandene Repos kontrolliert zusammen.

SWAnfängerfehlerYour local changes would be overwritten

git: local changes would be overwritten by merge

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.

SWAnfängerfehlerfatal: not a git repository

git: fatal: not a git repository

git meldet 'fatal: not a git repository (or any of the parent directories)'? Du bist im falschen Ordner oder .git fehlt. So kommst du zurück ins Repo.

SWLästig! [rejected] (non-fast-forward)

git push rejected: non-fast-forward beheben

git push wird mit '! [rejected] non-fast-forward' abgelehnt? Die Remote hat Commits, die dir fehlen. So holst du sie sauber nach und pushst gefahrlos.