Fehlerbehebung bei SSH 'Permission Denied (publickey)' Problemen
Erhalten Sie die Fehlermeldung 'Permission Denied (publickey)' bei der Verwendung von SSH? Dieser Leitfaden bietet eine umfassende Anleitung zur Behebung dieses häufigen Authentifizierungsfehlers. Erfahren Sie, wie Sie SSH-Schlüsselpaare sorgfältig überprüfen, falsche Dateiberechtigungen auf Client und Server diagnostizieren und sicherstellen, dass Ihre `authorized_keys`-Datei korrekt konfiguriert ist. Mit praktischen Beispielen und Schritt-für-Schritt-Anleitungen erhalten Sie wieder sicheren Zugriff auf Ihre entfernten Systeme.
Fehlerbehebung bei SSH 'Permission Denied (publickey)' Problemen
Permission denied (publickey) bedeutet, dass der Server erreichbar war, aber keinen Public-Key-Authentifizierungsversuch für den von Ihnen verwendeten Benutzer akzeptiert hat. Das grenzt das Problem ein. Sie debuggen nicht mehr Routing, DNS oder ob der SSH-Port offen ist. Sie debuggen die Identität: den Benutzernamen, den privaten Schlüssel, den Ihr Client angeboten hat, den auf dem Server gespeicherten öffentlichen Schlüssel und die Serverregeln, die entscheiden, ob diese Anmeldung erlaubt ist.
Der schnellste nützliche Befehl ist:
ssh -vvv benutzer@ihre_server_ip
Suchen Sie nach Authenticating to ... as 'benutzer', dann nach Offering public key. Wenn der erwartete Schlüssel nicht angeboten wird, beheben Sie das Problem auf dem Client. Wenn der erwartete Schlüssel angeboten und abgelehnt wird, beheben Sie die serverseitige authorized_keys, die Eigentümerschaft, die Berechtigungen oder die SSH-Daemon-Richtlinie.
Häufige Ursachen für 'Permission Denied (publickey)'
Der Fehler "Permission Denied (publickey)" kann durch mehrere Konfigurationsprobleme verursacht werden. Die Identifizierung der Grundursache erfordert oft die systematische Überprüfung der folgenden Komponenten:
- Falsche Dateiberechtigungen: SSH reagiert aus Sicherheitsgründen sehr empfindlich auf Datei- und Verzeichnisberechtigungen. Falsche Berechtigungen für Ihr lokales
~/.ssh-Verzeichnis, Ihre private Schlüsseldatei oder auf der Serverseite für das~/.ssh-Verzeichnis und dieauthorized_keys-Datei können die Authentifizierung verhindern. - Fehlender oder falscher
authorized_keys-Eintrag: Dieauthorized_keys-Datei des Servers muss den korrekten öffentlichen Schlüssel für den Benutzer enthalten, als der Sie sich anmelden möchten. Wenn der Schlüssel fehlt, fehlerhaft ist oder dem falschen Benutzer zugeordnet ist, schlägt die Authentifizierung fehl. - Falsche Schlüsselpaarzuordnung: Ihr SSH-Client bietet möglicherweise den falschen privaten Schlüssel an, oder der Server hat den entsprechenden öffentlichen Schlüssel nicht in der
authorized_keys-Datei aufgeführt. - SSH-Agent-Probleme: Wenn Sie einen SSH-Agenten verwenden, ist dieser möglicherweise nicht richtig mit Ihrem privaten Schlüssel geladen oder falsch konfiguriert.
- Serverseitige SSH-Konfiguration: Obwohl weniger häufig für diesen speziellen Fehler, kann die SSH-Daemon-Konfiguration des Servers (
sshd_config) spezifische Einschränkungen für die Public-Key-Authentifizierung haben.
Schritt-für-Schritt-Anleitung zur Fehlerbehebung
Lassen Sie uns in die praktischen Schritte eintauchen, um diese Probleme zu diagnostizieren und zu beheben.
1. Überprüfen Sie den lokalen privaten Schlüssel und die Berechtigungen
Ihre lokale SSH-Konfiguration ist der erste Ort, den Sie überprüfen sollten. Stellen Sie sicher, dass Ihr privater Schlüssel zugänglich ist und die korrekten Berechtigungen hat.
Überprüfen der Existenz des privaten Schlüssels
Ihr privater Schlüssel befindet sich oft in ~/.ssh/id_ed25519 oder ~/.ssh/id_rsa, aber viele Teams verwenden projektspezifische Namen. Listen Sie Ihre Schlüssel auf:
ls -la ~/.ssh
Laden Sie keinen privaten Schlüssel hoch oder fügen Sie ihn nicht in authorized_keys ein. Der Server benötigt den Inhalt der .pub-Datei, nicht den privaten Schlüssel.
Überprüfen der lokalen Dateiberechtigungen
Das ~/.ssh-Verzeichnis und Ihre private Schlüsseldatei sollten restriktive Berechtigungen haben, um unbefugten Zugriff zu verhindern.
~/.ssh-Verzeichnis: Sollte700(drwx------) sein.- Private Schlüsseldatei (z.B.
id_rsa): Sollte600(-rw-------) sein.
Verwenden Sie den Befehl chmod, um die korrekten Berechtigungen zu setzen:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
Tipp: Wenn Sie einen anderen Schlüsselnamen verwenden, ersetzen Sie id_rsa durch den tatsächlichen Namen Ihrer privaten Schlüsseldatei.
Wenn Sie einen bestimmten Schlüssel testen, erzwingen Sie ihn:
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_prod benutzer@ihre_server_ip
Dies verhindert, dass Ihr Agent zuerst eine lange Liste nicht zusammenhängender Schlüssel anbietet.
2. Überprüfen Sie die serverseitige authorized_keys-Konfiguration
Dies ist oft der häufigste Übeltäter. Der Server muss Ihren öffentlichen Schlüssel korrekt für den Benutzer aufgeführt haben, als den Sie sich zu authentifizieren versuchen.
Zugriff auf den Server (falls möglich)
Wenn Sie noch über eine andere Methode auf den Server zugreifen können (z.B. Passwort-Authentifizierung, ein anderes Benutzerkonto oder eine Konsole), melden Sie sich an, um die authorized_keys-Datei zu überprüfen.
Überprüfen des Speicherorts der authorized_keys-Datei
Die authorized_keys-Datei befindet sich normalerweise unter ~/.ssh/authorized_keys im Home-Verzeichnis des Benutzers, als den Sie sich anmelden möchten.
Überprüfen der serverseitigen Dateiberechtigungen
Ähnlich wie auf der Client-Seite sind die serverseitigen Berechtigungen entscheidend:
~/.ssh-Verzeichnis auf dem Server: Sollte700(drwx------) sein.authorized_keys-Datei auf dem Server: Sollte600(-rw-------) sein.
Stellen Sie sicher, dass diese Berechtigungen auf dem Server korrekt gesetzt sind:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Überprüfen Sie auch die Eigentümerschaft. Das .ssh-Verzeichnis und die authorized_keys-Datei sollten normalerweise dem Konto gehören, mit dem Sie sich anmelden:
chown -R ihrbenutzer:ihrbenutzer ~/.ssh
ls -ld ~ ~/.ssh ~/.ssh/authorized_keys
Wenn StrictModes in sshd_config aktiviert ist, kann OpenSSH Schlüssel ablehnen, wenn das Home-Verzeichnis oder der .ssh-Pfad von falschen Benutzern beschreibbar ist.
Überprüfen des Inhalts von authorized_keys
Öffnen Sie die Datei ~/.ssh/authorized_keys mit einem Texteditor (z.B. nano, vim). Jeder öffentliche Schlüssel sollte in einer einzigen Zeile stehen. Stellen Sie sicher, dass der öffentliche Schlüssel, den Sie verwenden möchten, vorhanden und korrekt formatiert ist. Er sollte mit ssh-rsa, ssh-ed25519 oder ähnlich beginnen, gefolgt von einer langen Zeichenfolge und optional einem Kommentar.
Beispiel für einen authorized_keys-Eintrag:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD... ihr_public_key_string benutzer@hostname
Fügen Sie Ihren privaten Schlüssel nicht zu authorized_keys hinzu. Nur der öffentliche Schlüssel sollte hier sein.
3. Stellen Sie sicher, dass der richtige öffentliche Schlüssel hinzugefügt wurde
Es ist möglich, dass der falsche öffentliche Schlüssel kopiert wurde oder dass der öffentliche Schlüssel auf dem Server nicht mit Ihrem lokalen privaten Schlüssel übereinstimmt.
Abrufen Ihres lokalen öffentlichen Schlüssels
Ihr öffentlicher Schlüssel ist das Gegenstück zu Ihrem privaten Schlüssel. Sie können ihn mit dem Befehl ssh-keygen anzeigen:
cat ~/.ssh/id_rsa.pub
Dieser Befehl gibt Ihren öffentlichen Schlüssel aus. Vergleichen Sie diese Ausgabe sorgfältig mit dem Eintrag in der ~/.ssh/authorized_keys-Datei des Servers. Selbst ein einzelner Tippfehler oder ein fehlendes Zeichen führt dazu, dass die Authentifizierung fehlschlägt.
Für einen saubereren Vergleich drucken Sie den öffentlichen Schlüssel, der von dem privaten Schlüssel abgeleitet ist, den Sie verwenden möchten:
ssh-keygen -y -f ~/.ssh/id_ed25519_prod
Diese Ausgabe sollte mit einer Zeile in der authorized_keys des entfernten Benutzers übereinstimmen.
Tipp: Eine schnelle Möglichkeit, Ihren öffentlichen Schlüssel hinzuzufügen, wenn Sie Passwortzugriff auf den Server haben, ist die Verwendung von ssh-copy-id.
ssh-copy-id benutzer@ihre_server_ip
Dieser Befehl hängt automatisch Ihren standardmäßigen öffentlichen Schlüssel (~/.ssh/id_rsa.pub) an die Datei ~/.ssh/authorized_keys auf dem entfernten Server an und setzt die korrekten Berechtigungen.
4. Geben Sie den richtigen privaten Schlüssel an (falls nicht standardmäßig)
Wenn Sie einen nicht standardmäßigen privaten Schlüssel verwenden (z.B. ~/.ssh/mein_anderer_schluessel), müssen Sie Ihrem SSH-Client mitteilen, welchen Schlüssel er verwenden soll.
Verwenden des -i-Flags
Sie können die Identitätsdatei (privaten Schlüssel) mit der Option -i angeben:
ssh -i ~/.ssh/mein_anderer_schluessel benutzer@ihre_server_ip
Konfigurieren von ~/.ssh/config
Der Einfachheit halber können Sie Ihren SSH-Client so konfigurieren, dass er für einen bestimmten Host immer einen bestimmten Schlüssel verwendet:
Erstellen oder bearbeiten Sie die Datei ~/.ssh/config auf Ihrem lokalen Rechner und fügen Sie einen Eintrag wie diesen hinzu:
Host ihr_server_alias
HostName ihre_server_ip_oder_domain
User ihr_benutzername
IdentityFile ~/.ssh/mein_anderer_schluessel
IdentitiesOnly yes
Dann können Sie sich einfach verbinden mit:
ssh ihr_server_alias
5. Überprüfen Sie den Status des SSH-Agenten
Wenn Sie sich auf einen SSH-Agenten verlassen, um Ihre Schlüssel zu verwalten, stellen Sie sicher, dass er läuft und Ihr Schlüssel geladen ist.
Überprüfen, ob der Agent läuft
echo "$SSH_AUTH_SOCK"
Wenn dies einen Pfad ausgibt, läuft der Agent wahrscheinlich. Wenn er leer ist, müssen Sie möglicherweise einen starten.
Hinzufügen des Schlüssels zum Agenten
Wenn Ihr Schlüssel nicht geladen ist, fügen Sie ihn hinzu:
ssh-add ~/.ssh/id_rsa
Wenn Sie nach einer Passphrase gefragt werden, geben Sie sie ein. Sie können überprüfen, welche Schlüssel mit ssh-add -l hinzugefügt wurden.
Wenn ssh-add -l viele nicht zusammenhängende Schlüssel anzeigt und der Server nach mehreren Versuchen die Verbindung trennt, entfernen Sie entweder alte Schlüssel aus dem Agenten oder verwenden Sie IdentitiesOnly yes für diesen Host.
6. Debuggen mit dem ausführlichen Modus
SSH hat einen ausführlichen Modus (-v, -vv oder -vvv für zunehmende Detailstufen), der unschätzbare Hinweise darauf geben kann, wo der Authentifizierungsprozess fehlschlägt.
ssh -vvv benutzer@ihre_server_ip
Untersuchen Sie die Ausgabe auf Nachrichten zur Schlüsselauthentifizierung, zum Anbieten von Schlüsseln und zu Serverantworten. Dies weist oft direkt auf das Problem hin.
Beispiel für einen ausführlichen Ausgabeausschnitt, der einen Publickey-Fehler anzeigt:
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /home/user/.ssh/id_rsa
debug1: read PEM private key file /home/user/.ssh/id_rsa
debug1: failed to use sshkey: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: password
Diese Ausgabe bedeutet, dass der Client id_rsa ausprobiert hat, der Server es nicht akzeptiert hat und der Client zur nächsten erlaubten Methode übergegangen ist.
7. Serverseitige Überprüfung der sshd_config (Fortgeschritten)
Überprüfen Sie /etc/ssh/sshd_config und alle Dateien in /etc/ssh/sshd_config.d/. Bestätigen Sie, dass die Public-Key-Authentifizierung aktiviert ist:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Suchen Sie dann nach Match-Blöcken in der Nähe des Endes der Datei. Ein späterer Match User-, Match Group- oder Match Address-Block kann frühere Einstellungen für das genaue Konto, das Sie testen, überschreiben.
Validieren Sie nach jeder Änderung die Syntax, bevor Sie neu laden:
sudo sshd -t
sudo systemctl reload sshd
Einige Systeme verwenden ssh als Dienstnamen anstelle von sshd.
Eine zuverlässige Reihenfolge bei der Fehlerbehebung
Verwenden Sie die ausführliche Ausgabe, um Rätselraten zu vermeiden. Bestätigen Sie zuerst den Benutzernamen. Bestätigen Sie dann, dass der Client den privaten Schlüssel anbietet, den Sie erwarten. Bestätigen Sie dann, dass der passende öffentliche Schlüssel in der authorized_keys des Zielbenutzers vorhanden ist. Überprüfen Sie dann die Eigentümerschaft und die Berechtigungen. Erst wenn diese sauber sind, sollten Sie Zeit mit sshd_config, Match-Blöcken, SELinux-Kontexten oder Kontobeschränkungen verbringen.
Diese Reihenfolge löst die meisten Fälle von Permission denied (publickey), ohne willkürliche Änderungen vorzunehmen, und verhindert, dass Sie die SSH-Sicherheit schwächen, nur um eine dringende Anmeldung zu ermöglichen.