Diagnose und Behebung von SSH-Authentifizierungsfehlern
Beheben Sie SSH-Authentifizierungsfehler mit detaillierten Client-Logs, Server-Logs, Berechtigungsprüfungen, Schlüsselvalidierung und sshd-Einstellungen.
Diagnose und Behebung von SSH-Authentifizierungsfehlern
Secure Shell (SSH) ist das Fundament der sicheren Fernverwaltung und ermöglicht verschlüsselten Zugriff auf Server und Netzwerkgeräte. Authentifizierungsfehler sind jedoch eine häufige und oft frustrierende Erfahrung für Systemadministratoren und Entwickler. Diese Probleme können eine Vielzahl von Ursachen haben, von einfachen Tippfehlern bis hin zu komplexen Berechtigungsproblemen oder Fehlkonfigurationen.
Dieser Artikel dient als umfassender Leitfaden zur effektiven Diagnose und Behebung von SSH-Authentifizierungsfehlern. Wir werden uns mit systematischen Fehlerbehebungsmethoden befassen und dabei die entscheidende Rolle der detaillierten Client-Ausgabe und der Server-Log-Analyse hervorheben. Wenn Sie verstehen, wie diese diagnostischen Hinweise zu interpretieren sind, sind Sie in der Lage, die Ursache der meisten Authentifizierungsprobleme zu identifizieren und Ihren sicheren Fernzugriff wiederherzustellen.
Grundlegendes zu SSH-Authentifizierungsmethoden
Bevor wir mit der Fehlerbehebung beginnen, ist es wichtig, die primären Authentifizierungsmethoden zu verstehen, die SSH verwendet:
- Passwort-Authentifizierung: Der Benutzer gibt ein Passwort ein, das der Server anhand seiner Benutzerdatenbank oder eines externen Authentifizierungsdienstes (wie PAM) überprüft.
- Public-Key-Authentifizierung: Diese sicherere Methode verwendet ein Paar kryptografischer Schlüssel: einen privaten Schlüssel, der auf dem Client gespeichert ist, und einen entsprechenden öffentlichen Schlüssel, der auf dem Server gespeichert ist. Bei der Authentifizierung verwendet der Client seinen privaten Schlüssel, um seine Identität nachzuweisen, ohne den privaten Schlüssel jemals über das Netzwerk zu senden.
Authentifizierungsfehler können bei beiden Methoden auftreten, aber die Schritte zur Fehlerbehebung unterscheiden sich oft.
Erste Überprüfungen und häufige Fallstricke
Bevor wir uns in detaillierte Logs stürzen, ist es ratsam, einige grundlegende Überprüfungen durchzuführen, da viele Probleme oft einfache Versehen sind:
- Richtiger Benutzername und Hostname: Überprüfen Sie, ob Sie den richtigen Benutzernamen und den genauen Hostnamen oder die IP-Adresse des Zielservers verwenden.
- Netzwerkkonnektivität: Können Sie den Server überhaupt erreichen? Verwenden Sie
nc -vz host 22oderssh -vvv, um die SSH-Erreichbarkeit zu testen.pingkann helfen, aber viele Server blockieren ICMP, selbst wenn SSH funktioniert.ping example.com - SSH-Dienststatus: Läuft der SSH-Server (
sshd) tatsächlich auf dem Zielrechner? Wenn Sie Konsolenzugriff haben, überprüfen Sie seinen Status.sudo systemctl status sshd # Für systemd-basierte Systeme (die meisten modernen Linux) sudo service sshd status # Für ältere init-Systeme - SSH-Port: Hört der SSH-Daemon auf dem Standardport (22) oder einem benutzerdefinierten Port? Wenn es ein benutzerdefinierter Port ist, müssen Sie ihn mit
-pangeben. - Firewall-Regeln: Gibt es Firewalls (client- oder serverseitig), die Port 22 (oder Ihren benutzerdefinierten SSH-Port) blockieren? Überprüfen Sie Server-Firewalls wie
ufw,firewalldoder AWS-Sicherheitsgruppen.sudo ufw status sudo firewall-cmd --list-all
Client-seitige Diagnose: Nutzung des ausführlichen Modus
Der SSH-Client bietet ausführliche Modi (-v, -vv, -vvv), die detaillierte Debugging-Ausgaben zum Verbindungsprozess und zu Authentifizierungsversuchen liefern. Diese Ausgabe ist unschätzbar, um zu verstehen, warum der Client glaubt, dass die Authentifizierung fehlschlägt.
Verwendung von ausführlichen Flags
-v: Ausführliche Ausgabe.-vv: Noch ausführlichere Ausgabe.-vvv: Noch ausführlichere Ausgabe (oft am nützlichsten für Authentifizierungsprobleme).
Beispielbefehl:
ssh -vvv benutzername@ihre_server_ip
Interpretation der ausführlichen Ausgabe
Wenn Sie ssh im ausführlichen Modus ausführen, achten Sie auf Schlüsselzeilen, die anzeigen, wo der Authentifizierungsprozess fehlschlägt:
debug1: Authentications that can continue:: Diese Zeile teilt Ihnen mit, welche Authentifizierungsmethoden der Server akzeptieren möchte. Wenn Ihre gewünschte Methode (z. B.publickey) nicht aufgeführt ist, verhindert die Serverkonfiguration diese.debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,passworddebug1: Offering public key:: Dies zeigt an, dass Ihr Client versucht, einen bestimmten öffentlichen Schlüssel für die Authentifizierung zu verwenden. Wenn Sie eine Public-Key-Authentifizierung erwarten, diese Zeile aber nicht sehen, findet oder bietet Ihr Client den Schlüssel nicht an.debug1: Offering public key: /home/user/.ssh/id_rsa RSA SHA256:...debug3: send_pubkey_test: ... trying private key: /home/user/.ssh/id_rsa: Dies bestätigt, dass der Client versucht, einen bestimmten privaten Schlüssel zu verwenden.debug1: Server accepts key: ...: Dies würde eine erfolgreiche Public-Key-Authentifizierung aus Sicht des Clients anzeigen. Wenn Sie dies nicht sehen, wurde der Schlüssel wahrscheinlich vom Server abgelehnt.debug1: No more authentication methods to try.: Dies erscheint oft kurz vor einemPermission denied-Fehler und bedeutet, dass der Client alle verfügbaren Authentifizierungsmethoden ohne Erfolg ausgeschöpft hat.debug1: Permission denied (publickey,password).: Dies ist der endgültige clientseitige Fehler, der die Ablehnung aller Versuche durch den Server zusammenfasst.
Tipp: Achten Sie genau auf die Reihenfolge der angebotenen und akzeptierten Authentifizierungsmethoden. Wenn
publickeyangeboten wird, aber sofort eine Passwortaufforderung folgt, bedeutet dies oft, dass der Server den öffentlichen Schlüssel abgelehnt hat.
Serverseitige Diagnose: Untersuchung der SSH-Server-Logs
Während die clientseitige ausführliche Ausgabe zeigt, was der Client zu tun versucht, liefern Server-Logs endgültige Informationen darüber, warum der Server den Authentifizierungsversuch abgelehnt hat. Dies ist oft der kritischste Schritt bei der Ursachenanalyse.
Auffinden der SSH-Server-Logs
Der Speicherort der SSH-Server-Logs variiert je nach Betriebssystem:
- Debian/Ubuntu und Derivate:
/var/log/auth.log - RHEL/CentOS/Fedora und Derivate:
/var/log/secure - Systemd-basierte Systeme (die meisten modernen Linux): Sie können auch
journalctlverwenden.
Anzeigen und Filtern von Server-Logs
Verwenden Sie Tools wie tail oder journalctl, um Logs in Echtzeit zu überwachen oder nach SSH-spezifischen Einträgen zu filtern.
Beispielbefehle:
# Für Debian/Ubuntu
sudo tail -f /var/log/auth.log | grep sshd
# Für RHEL/CentOS
sudo tail -f /var/log/secure | grep sshd
# Für systemd-basierte Systeme (robusteste Methode zum Anzeigen aktueller Logs)
sudo journalctl -u sshd -f
# Zum Anzeigen aller sshd-Logs von Anfang an (nützlich, wenn der Fehler früher aufgetreten ist)
sudo journalctl -u sshd
Häufige Server-Log-Einträge und ihre Bedeutung
Achten Sie auf Nachrichten im Zusammenhang mit sshd, wenn Sie versuchen, eine Verbindung herzustellen. Hier sind einige häufige Einträge, die auf Authentifizierungsfehler hinweisen:
Failed password for user from IP port ssh2: Zeigt an, dass ein Passwort-Authentifizierungsversuch fehlgeschlagen ist. Dies kann auf ein falsches Passwort zurückzuführen sein oder darauf, dass der Benutzer nicht berechtigt ist, sich über ein Passwort anzumelden.Authentication refused: bad ownership or modes for directory /home/user/.ssh: Dies ist ein sehr häufiger Public-Key-Authentifizierungsfehler. Das.ssh-Verzeichnis auf dem Server hat falsche Berechtigungen.- Lösung:
chmod 700 /home/user/.ssh
- Lösung:
Authentication refused: bad ownership or modes for file /home/user/.ssh/authorized_keys: Ein weiterer häufiger Public-Key-Fehler, der darauf hinweist, dass die Dateiauthorized_keysfalsche Berechtigungen hat.- Lösung:
chmod 600 /home/user/.ssh/authorized_keys
- Lösung:
sshd[PID]: error: Permissions 0777 for '/home/user/.ssh/authorized_keys' are too open.: Gibt explizit das Problem mit zu freizügigen Dateimodi an. SSH ist aus Sicherheitsgründen sehr streng bei Berechtigungen.User username from IP not allowed because not listed in AllowUsers: Der Benutzer darf sich gemäß derAllowUsers-Direktive in/etc/ssh/sshd_confignicht über SSH anmelden.User username from IP not allowed because listed in DenyUsers: Der Benutzer wird durchDenyUsersexplizit vom SSH-Zugriff ausgeschlossen.input_userauth_request: invalid user username: Der angegebene Benutzername existiert auf dem Server nicht.Failed publickey for useroder wiederholt angebotene Schlüssel, gefolgt von einem Passwort: Der vom Client präsentierte öffentliche Schlüssel stimmte mit keinem akzeptierten Schlüssel für diesen Benutzer überein, oder der Server lehnte den Schlüssel aufgrund von Berechtigungen oder Richtlinien ab.Maximum authentication attempts exceeded for user from IP: Der Client hat zu viele Authentifizierungsmethoden versucht oder zu viele falsche Anmeldeinformationen gesendet. Gesteuert durchMaxAuthTriesinsshd_config.Connection closed by authenticating user IP port 22 [preauth]: Dies kann auftreten, wenn keine akzeptable Authentifizierungsmethode gefunden wurde oder wenn der Client die Verbindung nach einem Fehler abrupt schließt.
Häufige Szenarien von Authentifizierungsfehlern und Lösungen
Lassen Sie uns häufige Fehler und ihre spezifischen Abhilfemaßnahmen kategorisieren.
1. Fehler bei der Passwort-Authentifizierung
- Falsches Passwort: Das einfachste Problem. Überprüfen Sie Ihr Passwort noch einmal. Achten Sie auf Tastaturlayouts, Feststelltaste oder Num-Taste.
- Benutzer nicht berechtigt: Die Datei
sshd_config(/etc/ssh/sshd_config) könnte die Anmeldung für bestimmte Benutzer einschränken.PermitRootLogin no: Verhindert die Root-Anmeldung (aus Sicherheitsgründen sehr empfehlenswert).AllowUsers benutzername1 benutzername2: Nur angegebene Benutzer können sich anmelden.DenyUsers benutzername: Angegebene Benutzer können sich nicht anmelden.AllowGroups gruppenname: Nur Benutzer in angegebenen Gruppen können sich anmelden.- Lösung: Passen Sie die
sshd_config-Direktiven an und starten Siesshdneu.
- PAM-Probleme: Wenn der Server Pluggable Authentication Modules (PAM) verwendet, können Probleme mit der PAM-Konfiguration die Passwort-Authentifizierung verhindern. Überprüfen Sie
/var/log/auth.logauf PAM-spezifische Fehler. Dies ist bei grundlegenden SSH-Setups weniger üblich.
2. Fehler bei der Public-Key-Authentifizierung
Die Public-Key-Authentifizierung ist oft sicherer, aber anfälliger für konfigurationsbedingte Fehler.
- Falsche Datei-/Verzeichnisberechtigungen (serverseitig): Dies ist bei weitem die häufigste Ursache. SSH erfordert aus Sicherheitsgründen strenge Berechtigungen für
~/.sshund~/.ssh/authorized_keys.~: Das Home-Verzeichnis des Benutzers sollte nicht weltweit beschreibbar sein (chmod 755 ~ist normalerweise sicher).~/.ssh: Muss700sein (rwx nur für den Besitzer).chmod 700 ~/.ssh~/.ssh/authorized_keys: Muss600sein (rw nur für den Besitzer).chmod 600 ~/.ssh/authorized_keys- Der Besitzer dieser Dateien und Verzeichnisse muss der Benutzer sein, der sich anzumelden versucht.
sudo chown -R benutzername:benutzername ~/.ssh
- Falscher Inhalt von
authorized_keys: Der öffentliche Schlüssel in~/.ssh/authorized_keyskönnte beschädigt sein, zusätzliche Zeichen enthalten oder ein falsches Format haben. Jeder Schlüssel sollte in einer einzigen Zeile stehen. Eine schnelle Möglichkeit, das richtige Format sicherzustellen, ist die Verwendung vonssh-copy-idvom Client aus.
Um den Fingerabdruck Ihres öffentlichen Schlüssels auf der Client-Seite zu überprüfen, verwenden Sie:ssh-copy-id -i ~/.ssh/id_rsa.pub benutzername@ihre_server_ipssh-keygen -l -f ~/.ssh/id_rsa.pub - Client bietet keinen Schlüssel an: Der private Schlüssel befindet sich möglicherweise nicht am Standardspeicherort (
~/.ssh/id_rsa), ist nicht inssh-agentgeladen, oder Sie haben ihn nicht mit-iangegeben.- Lösung: Stellen Sie sicher, dass sich Ihr privater Schlüssel als
id_rsa(oderid_ed25519usw.) in~/.sshbefindet und die Berechtigung600hat. Wenn nicht, geben Sie ihn an:ssh -i /pfad/zu/ihrem/privaten_schluessel benutzername@ihre_server_ip - Wenn Sie
ssh-agentverwenden, stellen Sie sicher, dass Ihr Schlüssel hinzugefügt ist:eval "$(ssh-agent -s)" ssh-add ~/.ssh/ihr_privater_schluessel
- Lösung: Stellen Sie sicher, dass sich Ihr privater Schlüssel als
sshd_configverbietet Public-Key-Auth: Der SSH-Daemon des Servers könnte so konfiguriert sein, dass er die Public-Key-Authentifizierung verbietet.- Überprüfen Sie
PubkeyAuthentication yesin/etc/ssh/sshd_config. - Überprüfen Sie
AuthorizedKeysFile .ssh/authorized_keys, um sicherzustellen, dass es auf die richtige Datei verweist. Der Standardwert ist normalerweise in Ordnung. - Lösung: Setzen Sie
PubkeyAuthentication yesund starten Siesshdneu.
- Überprüfen Sie
- SELinux/AppArmor-Interferenz: Auf Systemen mit SELinux oder AppArmor können diese Sicherheitsmodule manchmal den Zugriff von SSH auf Benutzer-Home-Verzeichnisse oder
.ssh-Dateien blockieren, selbst wenn die Dateiberechtigungen korrekt sind. Überprüfen Sie Audit-Logs (/var/log/audit/audit.logodersudo ausearch -m AVC -ts recent) auf Hinweise. Dies ist ein fortgeschrittenes Szenario.
3. Verbindung verweigert oder Zeitüberschreitung
Obwohl es sich nicht streng um "Authentifizierungsfehler" handelt, treten diese oft vor Authentifizierungsversuchen auf und verhindern, dass diese überhaupt beginnen.
- Firewall blockiert: Überprüfen Sie Firewalls sowohl auf dem Client (z. B. lokale OS-Firewall) als auch auf dem Server (z. B.
ufw,firewalld, Cloud-Sicherheitsgruppen, Netzwerk-ACLs). Stellen Sie sicher, dass Port 22 (oder der benutzerdefinierte Port) geöffnet ist. - SSH-Server läuft nicht: Der
sshd-Dienst ist möglicherweise nicht aktiv oder abgestürzt. - Falscher Port/IP: Versuch, eine Verbindung zum falschen Port oder zur falschen IP-Adresse herzustellen.
Allgemeine Debugging-Tipps
- Überprüfen Sie
sshd_config: Überprüfen Sie immer/etc/ssh/sshd_configauf dem Server auf nicht standardmäßige Einstellungen, die stören könnten. Starten Sie nach Änderungen immer den SSH-Daemon neu:sudo systemctl restart sshd(odersudo service sshd restart). - Testen Sie mit einem neuen Benutzer/Schlüssel: Erstellen Sie nach Möglichkeit einen neuen Benutzer und ein neues Paar aus öffentlichem und privatem Schlüssel. Versuchen Sie, sich mit diesem neuen Setup zu authentifizieren. Wenn es funktioniert, liegt das Problem an der Konfiguration des ursprünglichen Benutzers.
- Isolieren Sie das Problem: Versuchen Sie, von einem anderen Client-Rechner aus eine Verbindung herzustellen. Wenn es funktioniert, liegt das Problem clientseitig vor. Wenn es von mehreren Clients aus fehlschlägt, liegt das Problem serverseitig vor.
- Erhöhen Sie den LogLevel (serverseitig): Für tiefgehendes Debugging können Sie vorübergehend
LogLevel DEBUGin/etc/ssh/sshd_configsetzen undsshdneu starten. Denken Sie daran, diese Einstellung nach der Fehlerbehebung rückgängig zu machen, da Debug-Logs sehr ausführlich sein und Speicherplatz verbrauchen können.
Fazit
Verwenden Sie ssh -vvv, um zu sehen, was Ihr Client anbietet, und überprüfen Sie dann die Server-Logs, um zu erfahren, warum sshd es abgelehnt hat. Die meisten Public-Key-Fehler lassen sich auf den falschen Schlüssel, einen fehlenden Eintrag in authorized_keys, strenge Dateiberechtigungen oder eine sshd_config-Regel zurückführen, die den Benutzer oder die Methode blockiert.