Skip to main content

Fehler: „Permission denied (publickey)“ (Berechtigung verweigert: öffentlicher Schlüssel)

Die Fehlermeldung „Permission denied“ (Berechtigung verweigert) bedeutet, dass der Server deine Verbindung abgelehnt hat. Dafür kann es verschiedene Gründe geben. Die häufigsten werden nachfolgend erläutert.

Platform navigation

Sollten der sudo-Befehl oder erhöhte Rechte mit Git verwendet werden?

Du solltest den sudo-Befehl oder erhöhte Rechte (z. B. Administratorberechtigungen) nicht mit Git verwenden. Wenn du einen sehr guten Grund für die Nutzung von sudo hast, solltest du sicherstellen, dass du es mit jedem Befehl verwendest (es wird empfohlen, einfach su zu verwenden, um eine Shell als Stamm zu verwenden). Wenn du SSH-Schlüssel ohne sudo generierst und dann versuchst, einen Befehl wie sudo git push auszuführen, verwende nicht die gleichen Schlüssel, die du generiert hast.

Überprüfen, ob du eine Verbindung mit dem richtigen Server herstellst

Tippen ist fehleranfällig, das wissen wir alle. Achte darauf, was du eingibst. Du kannst keine Verbindung mit „githib.com“ oder „guthub.com“ herstellen. In einigen Fällen kann ein Unternehmensnetzwerk auch Probleme bei der Auflösung des DNS-Eintrags verursachen.

Um sicherzustellen, dass du die Verbindung mit der richtigen Domäne herstellst, kannst du den folgenden Befehl eingeben:

$ ssh -vT git@github.com
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Reading configuration data /etc/ssh/ssh_config
> debug1: /etc/ssh/ssh_config line 47: Applying options for *
> debug1: Connecting to github.com port 22.

Die Verbindung sollte über Port 22 hergestellt werden, es sei denn, du überschreibst Einstellungen, um SSH über HTTPS zu verwenden.

Immer den „git“-Benutzer verwenden

Alle Verbindungen, auch die zu Remote-URLs, müssen als „git“-Benutzer hergestellt werden. Wenn du versuchst, die Verbindung unter deinem GitHub-Benutzernamen herzustellen, tritt ein Fehler auf:

$ ssh -T GITHUB-USERNAME@github.com
> Permission denied (publickey).

Wenn deine Verbindung fehlgeschlagen ist und du eine Remote-URL mit deinem GitHub-Benutzernamen verwendest, kannst du die Remote-URL ändern, um den „git“-Benutzer zu verwendest.

Du solltest deine Verbindung mit der folgenden Eingabe überprüfen:

$ ssh -T git@github.com
> Hi USERNAME! You've successfully authenticated...

Stelle sicher, dass du einen Schlüssel hast, der verwendet wird

  1. Öffne TerminalTerminalGit Bash.

  2. Überprüfe, dass du einen privaten Schlüssel erzeugt und in SSH geladen haben.

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

Wenn du GitHub Desktop installiert hast, kannst du dies verwenden, um Repositorys zu klonen und nicht mit SSH-Schlüsseln arbeiten zu müssen.

  1. Wenn du Git Bash verwendest, aktiviere ssh-agent:

    # start the ssh-agent in the background
    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    

    Wenn du eine andere Terminaleingabeaufforderung verwendest, z. B. Git für Windows, aktiviere ssh-agent:

    # start the ssh-agent in the background
    $ eval $(ssh-agent -s)
    > Agent pid 59566
    

    Hinweis: Die oben genannten Eval-Befehle starten ssh-agent manuell in Ihrer Umgebung. Diese Befehle können fehlschlagen, wenn ssh-agent bereits als Hintergrundsystemdienst ausgeführt wird. In diesem Fall empfehlen wir, die entsprechende Dokumentation für die Umgebung zu überprüfen.

  2. Überprüfe, dass du einen privaten Schlüssel erzeugt und in SSH geladen hast.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  1. Öffne TerminalTerminalGit Bash.

  2. Überprüfe, dass du einen privaten Schlüssel erzeugt und in SSH geladen haben.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    

Der ssh-add-Befehl sollte eine lange Zeichenfolge von Zahlen und Buchstaben drucken. Wenn nichts gedruckt wird, musst du einen neuen SSH-Schlüssel generieren und ihn mit GitHub verknüpfen.

Tipp: In den meisten Systemen werden die privaten Standardschlüssel (~/.ssh/id_rsa und ~/.ssh/identity) dem SSH-Authentifizierungs-Agent automatisch hinzugefügt. Die Ausführung von ssh-add path/to/key sollte nicht notwendig sein, es sei denn, du überschreibst den Dateinamen beim Generieren eines Schlüssels.

Weitere Informationen abrufen

Du kannst auch überprüfen, ob der Schlüssel verwendet wird, indem du versuchst, eine Verbindung mit git@github.com herzustellen:

$ ssh -vT git@github.com
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type -1
> debug1: identity file /Users/YOU/.ssh/id_rsa-cert type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa type -1
> debug1: identity file /Users/YOU/.ssh/id_dsa-cert type -1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Trying private key: /Users/YOU/.ssh/id_rsa
> debug1: Trying private key: /Users/YOU/.ssh/id_dsa
> debug1: No more authentication methods to try.
> Permission denied (publickey).

In diesem Beispiel hatten wir keine Schlüssel, die SSH verwenden konnte. Die „-1“ am Ende der „identitiy file“-Zeilen bedeutet, dass SSH keine entsprechende Datei finden konnte. Weiter unten weisen auch die „Trying private key“-Zeilen darauf hin, dass keine Datei gefunden wurde. Wenn eine Datei vorhanden wäre, würde dort „1“ respektive „Offering public key“ (öffentlicher Schlüssel angeboten) stehen:

$ ssh -vT git@github.com
> ...
> debug1: identity file /Users/YOU/.ssh/id_rsa type 1
> ...
> debug1: Authentications that can continue: publickey
> debug1: Next authentication method: publickey
> debug1: Offering RSA public key: /Users/YOU/.ssh/id_rsa

Überprüfen, ob der öffentliche Schlüssel an dein Konto angehängt ist

Du musst deinen öffentlichen Schlüssel für GitHub bereitstellen, um eine sichere Verbindung herzustellen.

  1. Öffne das Terminal.

  2. Starte den SSH-Agenten im Hintergrund.

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. Suche und notiere deinen öffentlichen Schlüssel-Fingerprint.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. Klicke auf einer beliebigen Seite in der oberen rechten Ecke auf dein Profilfoto und anschließend auf Einstellungen.

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. Klicke im Abschnitt „Zugriff“ der Seitenleiste auf SSH- und GPG-Schlüssel.

  6. Vergleiche die Liste der SSH-Schlüssel mithilfe des ssh-add-Befehls mit der Ausgabe.

  1. Öffne die Befehlszeile.

  2. Starte den SSH-Agenten im Hintergrund.

    $ ssh-agent -s
    > Agent pid 59566
    
  3. Suche und notiere deinen öffentlichen Schlüssel-Fingerprint.

    $ ssh-add -l -E sha256
    > 2048 SHA256:274ffWxgaxq/tSINAykStUL7XWyRNcRTlcST1Ei7gBQ /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. Klicke auf einer beliebigen Seite in der oberen rechten Ecke auf dein Profilfoto und anschließend auf Einstellungen.

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. Klicke im Abschnitt „Zugriff“ der Seitenleiste auf SSH- und GPG-Schlüssel.

  6. Vergleiche die Liste der SSH-Schlüssel mithilfe des ssh-add-Befehls mit der Ausgabe.

  1. Öffne das Terminal.

  2. Starte den SSH-Agenten im Hintergrund.

    $ eval "$(ssh-agent -s)"
    > Agent pid 59566
    
  3. Suche und notiere deinen öffentlichen Schlüssel-Fingerprint. Bei Verwendung von OpenSSH 6.7 oder älter:

    $ ssh-add -l
    > 2048 a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    

    Bei Verwendung von OpenSSH 6.8 oder neuer:

    $ ssh-add -l -E md5
    > 2048 MD5:a0:dd:42:3c:5a:9d:e4:2a:21:52:4e:78:07:6e:c8:4d /Users/USERNAME/.ssh/id_rsa (RSA)
    
  4. Klicke auf einer beliebigen Seite in der oberen rechten Ecke auf dein Profilfoto und anschließend auf Einstellungen.

    Screenshot of a user's account menu on GitHub. The menu item "Settings" is outlined in dark orange.

  5. Klicke im Abschnitt „Zugriff“ der Seitenleiste auf SSH- und GPG-Schlüssel.

  6. Vergleiche die Liste der SSH-Schlüssel mithilfe des ssh-add-Befehls mit der Ausgabe.

Wenn kein öffentlicher Schlüssel in GitHub angezeigt wird, musst du Deinen SSH-Schlüssel zu GitHub hinzufügen, um ihn deinem Computer zuzuordnen.

Warnung: Wenn Dir auf GitHub ein unbekannter SSH-Schlüssel angezeigt wird, solltest du ihn sofort löschen und Dich an den uns über das GitHub-Support-Portal wenden. Ein Dir unbekannter öffentlicher Schlüssel kann ein Hinweis auf ein Sicherheitsproblem sein. Weitere Informationen findest du unter SSH-Schlüssel überprüfen.