Zum Inhalt springen
ecdsa.com
OpenSSH client (ssh, scp, sftp, git over SSH)SSH

Fehlermeldung

Permission denied (publickey).

Auch ausgegeben als

  • git@github.com: Permission denied (publickey).
  • Permission denied (publickey,password).

Mit vorangestelltem `user@host:`. Die Liste in Klammern zeigt die Methoden, die der Server noch zulässt, zum Beispiel `(publickey,password)` oder `(publickey,gssapi-keyex,gssapi-with-mic)`.

Was der Fehler bedeutet

Die SSH-Verbindung und die Prüfung des Hosts waren erfolgreich, aber der Server hat keinen der öffentlichen Schlüssel akzeptiert, die der Client angeboten hat, und Public-Key-Authentifizierung ist die einzige Methode, die er zulässt (die Liste in Klammern). Der Client erfährt nie, warum ein Schlüssel abgelehnt wurde – der Grund steht nur im Log des Servers. Bei GitHub, GitLab und Bitbucket bedeutet dieselbe Meldung, dass keiner deiner Schlüssel beim Konto (oder als Deploy-Key) für dieses Repository registriert ist.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Angebotene Schlüssel anzeigen

    `ssh -v` listet jeden Schlüssel auf, den der Client anbietet, und ob der Server ihn akzeptiert hat; `ssh -G` zeigt den effektiven Benutzer und die Identitätsdateien, nachdem die gesamte Konfiguration angewendet wurde.

    bash
    ssh -v deploy@server.example.com 2>&1 | grep -E "Offering|Server accepts|Authentications that can continue|send_pubkey_test"
    ssh-add -l                                  # keys the agent offers
    ssh -G deploy@server.example.com | grep -E "^(user|identityfile|identitiesonly) "
  2. 2.

    Identität pro Host festlegen

    `IdentityFile` zusammen mit `IdentitiesOnly yes` bietet genau einen Schlüssel an und vermeidet „Too many authentication failures“ bei Agenten mit vielen Schlüsseln.

    text
    # ~/.ssh/config
    Host server.example.com
      User deploy
      IdentityFile ~/.ssh/deploy_ed25519
      IdentitiesOnly yes
  3. 3.

    Serverseite korrigieren und ihr Log lesen

    Installiere den öffentlichen Schlüssel für den richtigen Benutzer mit strikten Berechtigungen und suche im Log von sshd nach dem konkreten Grund der Ablehnung.

    bash
    # On the server: install the key and fix modes (sshd ignores keys in group/world-writable paths)
    install -d -m 700 ~/.ssh && cat deploy_ed25519.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
    sudo journalctl -u ssh --since "10 min ago" | grep -E "Authentication refused|not in PubkeyAccepted|Failed publickey"

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen