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 Remote-Server. Die Meldung ssh: connect to host <IP_ADDRESS> port 22: Connection refused kann jedoch ein frustrierendes Hindernis darstellen, das Sie daran hindert, auf Ihre wichtigen Systeme zuzugreifen.
Dieser Artikel bietet eine umfassende, schrittweise Anleitung zur Diagnose und Behebung des häufigen Fehlers 'Connection Refused'. Wir werden die Hauptursachen untersuchen, von inaktiven SSH-Daemons über falsch konfigurierte Firewalls bis hin zu falschen Servereinstellungen, und Ihnen das Wissen und die Befehle vermitteln, um schnell wieder Zugriff auf Ihre Server zu erhalten.
Den Fehler 'Connection Refused' verstehen
Wenn Sie die Fehlermeldung Connection refused erhalten, bedeutet dies, dass Ihr SSH-Client den Remote-Server erfolgreich erreicht hat, der Server die Verbindung auf dem angegebenen Port jedoch explizit abgelehnt hat. Dies unterscheidet sich von einem Connection timed out-Fehler (bei dem der Client den Server überhaupt nicht erreichen konnte) oder einem No route to host-Fehler (bei dem der Netzwerkpfad unterbrochen ist).
Der Status „refused“ weist direkt auf ein serverseitiges Problem hin, das den SSH-Dienst aktiv daran hindert, Verbindungen anzunehmen. Dies beinhaltet typischerweise, dass der SSH-Daemon nicht läuft, eine Firewall die Verbindung blockiert oder eine Fehlkonfiguration innerhalb des SSH-Dienstes selbst vorliegt.
Häufige Ursachen für 'Connection Refused'
Mehrere Faktoren können dazu führen, dass eine SSH-Verbindung abgelehnt wird. Das Verständnis dieser Faktoren hilft, den Fehlerbehebungsprozess einzugrenzen:
- SSH-Daemon (
sshd) läuft nicht: Die häufigste Ursache. Der SSH-Serverprozess ist möglicherweise abgestürzt, wurde gestoppt oder konnte beim Start nicht gestartet werden. - Firewall blockiert Port 22 (oder benutzerdefinierten Port): Die Firewall des Servers (z.B. UFW, firewalld, iptables) verhindert eingehende Verbindungen auf dem SSH-Port.
- Falsche SSH-Daemon-Konfiguration: Die Datei
sshd_configist möglicherweise falsch konfiguriert, was dazu führt, dass der SSH-Daemon auf einem anderen Port, einer falschen Netzwerkschnittstelle lauscht oder Verbindungen für bestimmte Benutzer/Methoden ablehnt. - Netzwerkverbindungsprobleme (seltener bei 'Refused'): Obwohl bei einem „refused“-Fehler weniger wahrscheinlich, könnte ein grundlegendes Netzwerkproblem manchmal unerwartet auftreten.
- SELinux- oder AppArmor-Beschränkungen: Sicherheitsverbesserungen wie SELinux oder AppArmor könnten
sshddaran hindern, korrekt zu funktionieren, insbesondere nach benutzerdefinierten Konfigurationen oder Systemänderungen.
Schritt-für-Schritt-Anleitung zur Fehlerbehebung
Tauchen wir ein in die praktischen Schritte zur Diagnose und Behebung des Fehlers 'Connection Refused'.
Schritt 1: SSH-Daemon-Status auf dem Server überprüfen
Das Erste, was Sie überprüfen sollten, ist, ob der SSH-Server-Daemon (sshd) tatsächlich auf Ihrem Remote-Rechner läuft. Sie benötigen in der Regel 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 (diesystemdverwenden, wie Ubuntu, CentOS 7+, Debian 8+):
bash sudo systemctl status sshd
Wennsshdnicht läuft, zeigt die Ausgabeinactive (dead)oder einen ähnlichen Status an. -
Den SSH-Daemon starten:
Wenn der Status inaktiv ist, versuchen Sie, den Dienst zu starten:
bash sudo systemctl start sshd -
SSH-Daemon beim Systemstart aktivieren:
Um sicherzustellen, dass SSH nach einem Neustart automatisch startet, aktivieren Sie es:
bash sudo systemctl enable sshd -
SSH-Daemon-Protokolle überprüfen:
Wennsshdnicht startet, können seine Protokolle entscheidende Hinweise liefern. Fürsystemd-Systeme:
bash sudo journalctl -u sshd --since "10 minutes ago"
Alternativ können Sie die allgemeinen Authentifizierungsprotokolle ü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 Verbindungsablehnungen. Sie könnte den Standard-SSH-Port (22) oder einen benutzerdefinierten Port, den Sie verwenden möchten, blockieren. Sie müssen sicherstellen, dass die Firewall eingehende Verbindungen auf dem SSH-Port zulässt.
-
Ihre Firewall identifizieren:
Gängige Firewalls sind:- UFW (Uncomplicated Firewall): Häufig auf Ubuntu/Debian.
- firewalld: Häufig auf CentOS/RHEL 7+.
- iptables: Die zugrunde liegende Firewall für Linux, direkt oder über Frontends konfiguriert.
-
Firewall-Status und -Regeln überprüfen:
- UFW:
bash sudo ufw status verbose
Suchen Sie nach Regeln, die den Datenverkehr aufPort 22(oder Ihrem benutzerdefinierten SSH-Port) zulassen. Wenn SSH aufgeführt ist, stellen Sie sicher, dass esALLOWed ist. - firewalld:
bash sudo firewall-cmd --list-all
Überprüfen Sie die Abschnitteservicesundportsaufsshoderport 22/tcp. - iptables:
bash sudo iptables -L -v -n
Diese Ausgabe kann komplex sein. Suchen Sie nachDROP- oderREJECT-Regeln, die sich auftcp dpt:22(oder Ihren benutzerdefinierten Port) in derINPUT-Kette beziehen.
- UFW:
-
SSH-Port durch die Firewall zulassen:
- UFW:
bash 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:
bash 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 voniptables-Regeln ist komplexer und nur temporär, wenn sie nicht gespeichert werden. Es wird generell empfohlen,firewalldoderufwzu verwenden, falls verfügbar. Für einen schnellen Test (nicht persistent):
bash 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 bei Neustarts bestehen bleiben sollen.
Warnung: Seien Sie vorsichtig beim Ändern von Firewall-Regeln, insbesondere wenn Sie sich per SSH mit einem Remote-Server verbinden. Falsche Regeln können Sie dauerhaft aussperren. Verifizieren Sie immer, dass Ihre Änderungen funktionieren, bevor Sie Ihre aktuelle SSH-Sitzung schließen, falls Sie eine offen haben.
- UFW:
Schritt 3: SSH-Konfiguration (sshd_config) überprüfen
Die Konfigurationsdatei des SSH-Daemons (/etc/ssh/sshd_config) diktiert, wie der Dienst arbeitet. Fehlkonfigurationen hier können dazu führen, dass Verbindungen abgelehnt 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):
bash sudo nano /etc/ssh/sshd_config
Suchen Sie nach den folgenden Direktiven:Port: Dieser gibt den Port an, auf demsshdlauscht. Stellen Sie sicher, dass er mit dem Port übereinstimmt, mit dem Sie sich von Ihrem Client aus verbinden möchten. Wenn er auskommentiert ist (#), ist der Standardwert Port 22.ListenAddress: Falls vorhanden, gibt dies an, auf welchen IP-Adressensshdlauschen soll. Wenn er auf eine interne IP (z.B.127.0.0.1) eingestellt ist und Sie von einem externen Netzwerk aus verbinden, wird die Verbindung abgelehnt. Um auf allen Schnittstellen zu lauschen, ist er oft auskommentiert oder auf0.0.0.0oder::(für IPv6) gesetzt.PermitRootLogin: Wenn aufnogesetzt, können Sie sich nicht als root anmelden. Obwohl dies im strengsten Sinne keine „Connection refused“ ist (es handelt sich oft um eine „permission denied“ nach der Verbindung), kann es erfolgreiche Anmeldeversuche verhindern.PasswordAuthentication: Wenn aufnogesetzt, ist die Passwort-Authentifizierung deaktiviert und erfordert eine schlüsselbasierte Authentifizierung.
Tipp: Nachdem Sie Änderungen an
sshd_configvorgenommen haben, müssen Sie den SSH-Dienst neu starten, damit diese wirksam werden:
bash sudo systemctl restart sshd
Schritt 4: Netzwerkverbindung (Grundprüfung)
Obwohl eine „Connection refused“ typischerweise 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.
-
Den Server anpingen:
Versuchen Sie von Ihrem Client-Rechner aus, die IP-Adresse oder den Hostnamen des Servers anzupingen:
bash ping <SERVER_IP_ADDRESS_OR_HOSTNAME>
Wenn der Ping fehlschlägt (100% Paketverlust), haben Sie ein grundlegenderes Netzwerkproblem (z.B. falsche IP, Server offline, Netzwerk-Routing-Problem), das vor SSH behoben werden muss. -
ncodertelnetverwenden (vom Client aus):
Um zu testen, ob der Port aus Sicht des Clients offen ist und lauscht:
```bash
# Mit netcat (nc)
nc -zv22 Mit telnet
telnet
22
`` WennncConnection refusedanzeigt odertelnet` sofort beendet wird, bestätigt dies, dass der Server auf diesem Port aktiv ablehnt, was wieder 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 könnten SELinux (Security-Enhanced Linux) oder AppArmor sshd daran hindern, korrekt zu funktionieren, insbesondere wenn Sie einen nicht-standardmäßigen SSH-Port verwenden.
-
SELinux-Status überprüfen:
bash sestatus
Wenn SELinuxenforcingist, müssen Sie möglicherweise seine Richtlinien anpassen, umsshdauf einem benutzerdefinierten Port zuzulassen.
Um beispielsweise Port 2222 für SSH zuzulassen:
bash sudo semanage port -a -t ssh_port_t -p tcp 2222 sudo systemctl restart sshd
(Installieren Siesemanage, falls nicht verfügbar:sudo apt install policycoreutils-python-utilsauf Debian/Ubuntu,sudo yum install policycoreutils-pythonauf CentOS/RHEL). -
AppArmor-Status überprüfen:
bash sudo aa status
Wenn AppArmorenforcingist, überprüfen Sie seine Protokolle (/var/log/syslogoderdmesg) auf Ablehnungen im Zusammenhang mitsshd.
Schritt 6: Server-Protokolle erneut überprüfen
Nachdem Sie die vorherigen Schritte versucht haben, überprüfen Sie immer die Server-Protokolle erneut auf neue Fehlermeldungen im Zusammenhang mit sshd. Dies ist Ihre ultimative Informationsquelle 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 hindeuten, warum der Dienst möglicherweise nicht startet, warum Verbindungen abgebrochen werden oder nach anderen relevanten Informationen.
Best Practices zur Vermeidung zukünftiger Probleme
- Ihr Betriebssystem regelmäßig aktualisieren: Halten Sie das Betriebssystem und die Pakete Ihres Servers, einschließlich
openssh-server, auf dem neuesten Stand. - Firewall-Regeln testen: Testen Sie Firewall-Regeln immer sofort, nachdem Sie sie implementiert oder geändert haben.
sshd_configsichern: Erstellen Sie eine Sicherungskopie (sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak), bevor Sie Änderungen an/etc/ssh/sshd_configvornehmen.- Eine Verwaltungskonsole verwenden: Für Cloud-Instanzen sollten Sie wissen, 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.
- Protokolle überwachen: Überprüfen Sie regelmäßig
auth.log- odersecure-Protokolle auf ungewöhnliche Aktivitäten oder hartnäckige Fehler.
Fazit
Der Fehler 'Connection Refused' ist, obwohl frustrierend, in der Regel unkompliziert zu beheben, indem der SSH-Daemon-Status, die Firewall-Regeln und die sshd_config-Datei systematisch überprüft werden. Indem Sie die in dieser Anleitung beschriebenen Schritte befolgen, können Sie die Grundursache effizient diagnostizieren und Ihren sicheren Fernzugriff wiederherstellen. Denken Sie daran, Änderungen immer mit Vorsicht anzuwenden und die Funktionalität zu überprüfen, um sich nicht von Ihrem Server auszusperren.
Mit diesen Fehlerbehebungstechniken sind Sie gut gerüstet, um SSH-Verbindungsprobleme zu bewältigen und die nahtlose Kontrolle über Ihre Remote-Systeme aufrechtzuerhalten. Viel Erfolg beim SSHen!