SSH-Verbindungsfehler "Connection Refused" schnell beheben
Beheben Sie SSH-Verbindungsfehler "Connection Refused", indem Sie den sshd-Status, Ports, Firewall-Regeln, sshd_config, SELinux und Server-Logs überprüfen.
SSH-Verbindungsfehler "Connection Refused" schnell beheben
SSH (Secure Shell) ist das Rückgrat der Remote-Serververwaltung und ermöglicht eine sichere und verschlüsselte Kommunikation zwischen Ihrem lokalen Rechner und einem entfernten Server. Allerdings kann der Fehler ssh: connect to host <IP_ADRESSE> port 22: Connection refused ein frustrierendes Hindernis darstellen, das den Zugriff auf Ihre wichtigen Systeme verhindert.
Dieser Artikel bietet eine umfassende Schritt-für-Schritt-Anleitung zur Diagnose und Behebung des häufigen Fehlers "Connection Refused". Wir untersuchen die Hauptursachen, von inaktiven SSH-Daemons über falsch konfigurierte Firewalls bis hin zu falschen Servereinstellungen, und vermitteln Ihnen das Wissen und die Befehle, um schnell wieder Zugriff auf Ihre Server zu erhalten.
Den Fehler "Connection Refused" verstehen
Wenn Sie einen Fehler Connection refused erhalten, bedeutet dies, dass Ihr SSH-Client den entfernten Server erfolgreich erreicht hat, der Server die Verbindung auf dem angegebenen Port jedoch explizit verweigert hat. Dies unterscheidet sich von einem Fehler Connection timed out (bei dem der Client den Server überhaupt nicht erreichen konnte) oder einem Fehler No route to host (bei dem der Netzwerkpfad unterbrochen ist).
Der Status "refused" weist direkt auf ein Problem auf der Serverseite hin, das den SSH-Dienst aktiv daran hindert, Verbindungen anzunehmen. Dies betrifft typischerweise den nicht laufenden SSH-Daemon, eine Firewall, die die Verbindung blockiert, oder eine Fehlkonfiguration innerhalb des SSH-Dienstes selbst.
Häufige Ursachen für "Connection Refused"
Mehrere Faktoren können dazu führen, dass eine SSH-Verbindung verweigert wird. Das Verständnis dieser Faktoren hilft, den Fehlerbehebungsprozess einzugrenzen:
- SSH-Daemon (
sshd) läuft nicht: Die häufigste Ursache. Der SSH-Serverprozess könnte abgestürzt, gestoppt oder beim Booten nicht gestartet sein. - Firewall blockiert Port 22 (oder benutzerdefinierten Port): Die Firewall des Servers (z. B. UFW, firewalld, iptables) verhindert eingehende Verbindungen auf dem SSH-Port.
- Falsche Konfiguration des SSH-Daemons: Die Datei
sshd_configkönnte falsch konfiguriert sein, sodass der SSH-Daemon auf einem anderen Port, einer falschen Netzwerkschnittstelle lauscht oder Verbindungen für bestimmte Benutzer/Methoden verweigert. - Netzwerkkonnektivitätsprobleme (weniger häufig bei "Refused"): Obwohl weniger wahrscheinlich für einen "refused"-Fehler, kann ein grundlegendes Netzwerkproblem manchmal unerwartet auftreten.
- SELinux- oder AppArmor-Einschränkungen: Sicherheitserweiterungen wie SELinux oder AppArmor könnten den ordnungsgemäßen Betrieb von
sshdverhindern, insbesondere nach benutzerdefinierten Konfigurationen oder Systemänderungen.
Schritt-für-Schritt-Fehlerbehebungsanleitung
Lassen Sie uns in die praktischen Schritte zur Diagnose und Behebung des Fehlers "Connection Refused" eintauchen.
Schritt 1: Überprüfen des SSH-Daemon-Status auf dem Server
Als Erstes sollte überprüft werden, ob der SSH-Server-Daemon (sshd) auf Ihrem entfernten Rechner tatsächlich läuft. Normalerweise benötigen Sie Konsolenzugriff (z. B. über die Konsole eines Cloud-Anbieters oder eine physische Verbindung), um diese Überprüfungen durchzuführen, wenn SSH vollständig unzugänglich ist.
- SSH-Daemon-Status überprüfen:
Auf den meisten modernen Linux-Distributionen (die
systemdverwenden, wie Ubuntu, CentOS 7+, Debian 8+):sudo systemctl status sshd
Auf Debian/Ubuntu kann der Dienst ssh heißen:
sudo systemctl status ssh
```
Wenn sshd nicht läuft, zeigt die Ausgabe inactive (dead) oder einen ähnlichen Status an.
- SSH-Daemon starten:
Wenn der Status inaktiv ist, versuchen Sie, den Dienst zu starten:
sudo systemctl start sshd
Oder auf Debian/Ubuntu:
sudo systemctl start ssh ```
- SSH-Daemon für automatischen Start beim Booten aktivieren:
Um sicherzustellen, dass SSH nach einem Neustart automatisch startet, aktivieren Sie es:
sudo systemctl enable sshd
Oder auf Debian/Ubuntu:
sudo systemctl enable ssh ```
- SSH-Daemon-Logs überprüfen:
Wenn
sshdnicht startet, können seine Logs entscheidende Hinweise liefern. Fürsystemd-Systeme:sudo journalctl -u sshd --since "10 minutes ago"
Oder, wenn Ihre Distribution die ssh-Einheit verwendet:
sudo journalctl -u ssh --since "10 minutes ago"
Alternativ können Sie die allgemeinen Authentifizierungslogs überprüfen: bash
sudo tail -f /var/log/auth.log
# Oder für RHEL/CentOS:
sudo tail -f /var/log/secure
```
Schritt 2: Firewall-Regeln überprüfen
Eine serverseitige Firewall ist oft der Übeltäter für Verbindungsverweigerungen. Sie blockiert möglicherweise den Standard-SSH-Port (22) oder einen benutzerdefinierten Port, den Sie verwenden möchten. Sie müssen sicherstellen, dass die Firewall eingehende Verbindungen auf dem SSH-Port zulässt.
Ihre Firewall identifizieren: Häufige Firewalls sind:
- UFW (Uncomplicated Firewall): Üblich auf Ubuntu/Debian.
- firewalld: Üblich auf CentOS/RHEL 7+.
- iptables: Die zugrunde liegende Firewall für Linux, die direkt oder über Frontends konfiguriert wird.
Firewall-Status und -Regeln überprüfen:
- UFW:
Suchen Sie nach Regeln, die Datenverkehr aufsudo ufw status verboseport 22(oder Ihrem benutzerdefinierten SSH-Port) zulassen. Wenn SSH aufgeführt ist, stellen Sie sicher, dass esALLOWed ist. - firewalld:
Überprüfen Sie die Abschnittesudo firewall-cmd --list-allservicesundportsaufsshoderport 22/tcp. - iptables:
Diese Ausgabe kann komplex sein. Suchen Sie nachsudo iptables -L -v -nDROP- oderREJECT-Regeln in Bezug auftcp dpt:22(oder Ihren benutzerdefinierten Port) in derINPUT-Kette.
- UFW:
SSH-Port in der Firewall zulassen:
- UFW:
sudo ufw allow ssh # Erlaubt Port 22 # Oder für einen benutzerdefinierten Port (z. B. 2222): sudo ufw allow 2222/tcp sudo ufw enable # Wenn UFW inaktiv ist - firewalld:
sudo firewall-cmd --permanent --add-service=ssh # Oder für einen benutzerdefinierten Port (z. B. 2222): sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload - iptables:
Das direkte Hinzufügen von
iptables-Regeln ist komplexer und vorübergehend, sofern nicht gespeichert. Es wird generell empfohlen,firewalldoderufwzu verwenden, falls verfügbar. Für einen schnellen Test (nicht dauerhaft):sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Sie müssen diese Regeln speichern, wenn sie nach einem Neustart bestehen bleiben sollen.
Warnung: Seien Sie vorsichtig beim Ändern von Firewall-Regeln, insbesondere wenn Sie sich per SSH in einen entfernten Server einloggen. Falsche Regeln können Sie dauerhaft aussperren. Überprüfen Sie immer, ob Ihre Änderungen funktionieren, bevor Sie Ihre aktuelle SSH-Sitzung schließen, falls Sie eine offen haben.
- UFW:
Schritt 3: SSH-Konfiguration überprüfen (sshd_config)
Die Konfigurationsdatei des SSH-Daemons (/etc/ssh/sshd_config) legt fest, wie der Dienst arbeitet. Fehlkonfigurationen hier können dazu führen, dass Verbindungen verweigert werden.
sshd_configfinden: Die primäre Konfigurationsdatei befindet sich normalerweise unter/etc/ssh/sshd_config.Wichtige Einstellungen überprüfen: Öffnen Sie die Datei mit einem Texteditor (z. B.
nano,vi):sudo nano /etc/ssh/sshd_configSuchen Sie nach den folgenden Direktiven:
Port: Gibt den Port an, auf demsshdlauscht. Stellen Sie sicher, dass er mit dem Port übereinstimmt, mit dem Sie von Ihrem Client aus eine Verbindung herstellen möchten. Wenn er auskommentiert ist (#), wird standardmäßig Port 22 verwendet.ListenAddress: Wenn vorhanden, gibt dies an, auf welchen IP-Adressensshdlauschen soll. Wenn es auf eine interne IP (z. B.127.0.0.1) gesetzt ist und Sie von einem externen Netzwerk aus eine Verbindung herstellen, wird die Verbindung verweigert. Für das Lauschen auf allen Schnittstellen ist es oft auskommentiert oder auf0.0.0.0oder::(für IPv6) gesetzt.PermitRootLogin: Wenn aufnogesetzt, können Sie sich nicht als root anmelden. Obwohl dies streng genommen keine "connection refused" ist (es ist oft eine Berechtigungsverweigerung nach der Verbindung), kann es erfolgreiche Anmeldeversuche verhindern.PasswordAuthentication: Wenn aufnogesetzt, ist die Passwortauthentifizierung deaktiviert, was eine schlüsselbasierte Authentifizierung erfordert.
Tipp: Nachdem Sie Änderungen an
sshd_configvorgenommen haben, müssen Sie den SSH-Dienst neu starten, damit sie wirksam werden:sudo systemctl restart sshd
Schritt 4: Netzwerkkonnektivität (grundlegende Überprüfung)
Obwohl eine "connection refused" normalerweise bedeutet, dass der Server erreicht wurde, ist es immer gut, die grundlegende Netzwerkerreichbarkeit von Ihrem Client-Rechner zur IP-Adresse des Servers schnell zu bestätigen.
Server anpingen: Versuchen Sie von Ihrem Client-Rechner aus, die IP-Adresse oder den Hostnamen des Servers anzupingen:
ping <SERVER_IP_ADRESSE_ODER_HOSTNAME>Wenn Ping fehlschlägt (100% Paketverlust), haben Sie ein grundlegenderes Netzwerkproblem (z. B. falsche IP, Server offline, Netzwerkroutingproblem), das vor SSH behoben werden muss.
ncodertelnetverwenden (vom Client): Um zu testen, ob der Port aus Sicht des Clients geöffnet ist und lauscht:# Mit netcat (nc) nc -zv <SERVER_IP_ADRESSE> 22 # Mit telnet telnet <SERVER_IP_ADRESSE> 22Wenn
ncConnection refusedanzeigt odertelnetsofort beendet wird, bestätigt dies, dass der Server auf diesem Port aktiv ablehnt, was auf den SSH-Daemon oder die Firewall hindeutet.
Schritt 5: SELinux oder AppArmor überprüfen (Fortgeschritten)
In einigen gehärteten Umgebungen oder nach benutzerdefinierten Konfigurationen kann SELinux (Security-Enhanced Linux) oder AppArmor den ordnungsgemäßen Betrieb von sshd verhindern, insbesondere wenn Sie einen nicht standardmäßigen SSH-Port verwenden.
SELinux-Status überprüfen:
sestatusWenn SELinux
enforcingist, müssen Sie möglicherweise seine Richtlinien anpassen, umsshdauf einem benutzerdefinierten Port zu erlauben. Um beispielsweise Port 2222 für SSH zuzulassen:sudo semanage port -a -t ssh_port_t -p tcp 2222 sudo systemctl restart sshd(Installieren Sie
semanage, falls nicht verfügbar:sudo apt install policycoreutils-python-utilsauf Debian/Ubuntu,sudo yum install policycoreutils-python-utilsoder das passende Paket für Ihre RHEL-Familienversion).AppArmor-Status überprüfen:
sudo aa statusWenn AppArmor
enforcingist, überprüfen Sie seine Logs (/var/log/syslogoderdmesg) auf Verweigerungen im Zusammenhang mitsshd.
Schritt 6: Server-Logs erneut überprüfen
Nachdem Sie die vorherigen Schritte versucht haben, überprüfen Sie immer erneut die Server-Logs auf neue Fehlermeldungen im Zusammenhang mit sshd. Dies ist Ihre ultimative Quelle der Wahrheit dafür, was der Server erlebt.
sudo journalctl -u sshdsudo tail -f /var/log/auth.log(oder/var/log/secure)
Suchen Sie nach Nachrichten, die darauf hinweisen, warum der Dienst möglicherweise nicht startet, warum Verbindungen abgewiesen werden, oder andere relevante Informationen.
Best Practices zur Vermeidung zukünftiger Probleme
- Regelmäßiges Aktualisieren Ihres Betriebssystems: Halten Sie das Betriebssystem Ihres Servers und die Pakete, einschließlich
openssh-server, auf dem neuesten Stand. - Firewall-Regeln testen: Testen Sie Firewall-Regeln immer sofort nach der Implementierung oder Änderung.
sshd_configsichern: Erstellen Sie vor Änderungen an/etc/ssh/sshd_configein Backup (sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak).- Verwaltungskonsole verwenden: Wissen Sie bei Cloud-Instanzen, wie Sie auf die Konsole des Servers zugreifen (z. B. AWS EC2 Serial Console, Google Cloud Console), um Netzwerkprobleme zu beheben, wenn SSH nicht verfügbar ist.
- Logs überwachen: Überprüfen Sie regelmäßig die Logs
auth.logodersecureauf ungewöhnliche Aktivitäten oder anhaltende Fehler.
Abschließende Erkenntnis
Ein SSH-Verbindungsfehler "Connection refused" bedeutet normalerweise, dass der Server erreichbar ist, aber nichts Ihre Verbindung auf diesem Port akzeptiert. Überprüfen Sie den SSH-Dienstnamen für Ihre Distribution, bestätigen Sie, dass der Port lauscht, öffnen Sie die Firewall, validieren Sie sshd_config und lesen Sie die Logs, bevor Sie größere Änderungen vornehmen. Wenn Sie noch eine funktionierende Sitzung offen haben, halten Sie sie offen, bis eine neue Anmeldung erfolgreich ist.