"ssh: connect to host port 22: Connection refused" beheben

Ihr Computer hat die Adresse erreicht, und die Gegenseite hat geantwortet, dass auf diesem Port nichts Verbindungen annimmt. Meist läuft sshd nicht, lauscht auf einem anderen Port oder einer anderen Adresse, oder eine Firewall weist Sie ab. Auf dem Server zeigt sudo ss -tlnp, was wirklich lauscht, auf welcher Adresse und welchem Port.

Keine Lust, einen falschen Port durch Konfigurationsdateien zu verfolgen? Wardterm hält die Verbindungsdaten jedes Servers an einer Stelle. Zeigen

Aktualisiert am . Jede Ursache wurde auf einem Wegwerf-Container mit Debian 13 und OpenSSH 10.0 nachgestellt, mit ListenAddress, iptables REJECT, ufw und einer fail2ban-Sperre, mit OpenSSH 10.3 unter macOS und dem Debian-Client.

Was es bedeutet

ssh: connect to host 203.0.113.10 port 22: Connection refused

Die Verbindung kam nie bis zu SSH. Schlüssel, Passwörter und Benutzer spielen noch keine Rolle, ändern Sie sie also nicht. Eine Abweisung ist eine schnelle, aktive Antwort, und das sagt Ihnen etwas Nützliches: Ein Rechner oder eine Firewall auf diesem Weg antwortet. Antwortet gar nichts, bekommen Sie einen anderen Fehler, behandelt unter Connection timed out.

Zuerst: den Port von Ihrem Computer testen

nc -vz 203.0.113.10 22
ssh -G server | grep -E '^(hostname|port) '

Die erste Zeile testet den Port ohne SSH. Die zweite zeigt Adresse und Port, die Ihre ~/.ssh/config für diesen Namen wirklich liefert, was einen Tippfehler oder einen alten Eintrag aufdeckt. Nutzt Ihr Server einen anderen Port, probieren Sie diesen:

ssh -p 2222 user@203.0.113.10

Ursachen, nach Wahrscheinlichkeit geordnet

1. sshd läuft nicht oder ist nicht installiert

Für diese und die nächsten Prüfungen brauchen Sie einen anderen Zugang: die Konsole Ihres Anbieters oder physischen Zugriff.

sudo systemctl status ssh     # Debian, Ubuntu
sudo systemctl status sshd    # Red Hat family, most others
sudo ss -tlnp | grep -E 'sshd|:22 '

Zeigt ss keine Zeile auf dem SSH-Port, lauscht nichts. Unter Ubuntu kann die Zeile systemd statt sshd zeigen: Das ist ssh.socket, der auf Verbindungen wartet, und alles ist in Ordnung. Ein gesundes Ergebnis sieht so aus:

LISTEN 0 128   0.0.0.0:22  0.0.0.0:*  users:(("sshd",pid=1,fd=6))
LISTEN 0 128      [::]:22     [::]:*  users:(("sshd",pid=1,fd=7))

Ein häufiger Grund, warum sshd nicht startet, ist ein Fehler in seiner Konfiguration. Prüfen Sie die Datei und starten Sie ihn dann:

sudo sshd -t
sudo systemctl enable --now ssh

sshd -t gibt nichts aus, wenn die Datei gültig ist. Existiert der Dienst nicht, installieren Sie ihn, zum Beispiel mit sudo apt install openssh-server.

2. sshd lauscht auf einem anderen Port

sudo sshd -T | grep -iE '^(port|listenaddress) '

Vergleichen Sie den Port mit dem, zu dem Sie sich verbinden. sshd -T gibt die Konfiguration aus, nachdem alle Dateien gelesen wurden, einschließlich allem in /etc/ssh/sshd_config.d/.

Unter Ubuntu 22.10 und neuer kann sshd durch ssh.socket gestartet werden, der lauschende Port wird dann von systemd eingerichtet. Führen Sie nach einer Änderung von Port sudo systemctl daemon-reload und sudo systemctl restart ssh.socket aus und prüfen Sie dann mit ss, dass es gewirkt hat.

3. sshd lauscht auf einer anderen Adresse

Mit ListenAddress 127.0.0.1 erhielten wir genau dieses Verhalten: Der Port funktioniert vom Server selbst und wird von überall sonst abgewiesen.

LISTEN 0 128   127.0.0.1:22  0.0.0.0:*  users:(("sshd",pid=1,fd=6))

Sehen Sie sich die lokale Adresse in der ss-Ausgabe an. 0.0.0.0 und [::] bedeuten alle Adressen. Eine einzelne private oder Loopback-Adresse bedeutet, dass Sie sich nur über diese Adresse verbinden können. Zum Ändern bearbeiten oder entfernen Sie die Zeile ListenAddress und starten sshd neu.

Von außen erreichen Sie ihn trotzdem über eine Maschine im selben Netz: siehe ProxyJump und Jump-Host verwenden.

4. Eine Firewall weist die Verbindung ab

Eine Firewall-Regel, die auf Reject steht, gibt dieselbe Meldung wie ein geschlossener Port. Wir haben das mit einer iptables-REJECT-Regel bei laufendem sshd getestet, und ssh gab Connection refused aus. Eine Regel, die auf Drop steht, ergibt stattdessen ein Timeout.

sudo ufw status verbose
sudo iptables -L INPUT -n --line-numbers
sudo nft list ruleset

Nehmen Sie den Befehl, den Ihr System hat. So erlauben Sie SSH mit ufw:

sudo ufw allow 22/tcp

Sieht ss richtig aus und lokale Verbindungen funktionieren, ist das die wahrscheinlichste Ursache. Prüfen Sie auch die Firewall Ihres Anbieters oder Routers.

5. Ihre Adresse ist gesperrt

Eine fail2ban-Sperre sieht genau wie dieser Fehler aus. Auf einem Debian-13-Testserver bekam ein gesperrter Client von ssh und von nc Connection refused. Ein guter Hinweis: Der Server funktioniert aus einem anderen Netz, etwa über einen Handy-Hotspot. Prüfen und entfernen Sie die Sperre vom Server aus:

sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 203.0.113.20

Die Einrichtung steht in der fail2ban-Anleitung.

6. Sie erreichen einen anderen Rechner

Ist das DNS veraltet oder leitet ein Router den Port woandershin, fragen Sie womöglich den falschen Host. Vergleichen Sie dig +short server mit der Adresse, die der Anbieter anzeigt. Auf dem Server sehen Sie damit, ob Ihre Verbindung überhaupt ankommt:

sudo tcpdump -ni any 'tcp port 22'

Erscheint beim Verbinden kein Paket, kommt die Abweisung von irgendwo vor diesem Server.

Die Ergebnisse zusammen lesen

Vom ServerVon Ihrem ComputerWahrscheinliche Ursache
Keine sshd-Zeile in ssAbgewiesensshd ist gestoppt oder schlägt fehl
sshd auf einem anderen PortAuf 22 abgewiesenFalscher Port
sshd nur auf 127.0.0.1AbgewiesenListenAddress
sshd auf 0.0.0.0:22AbgewiesenFirewall weist ab, oder eine Sperre
sshd auf 0.0.0.0:22Funktioniert aus einem anderen NetzEine Sperre oder ein Block in Ihrem Netz

Ändern Sie sshd- oder Firewall-Einstellungen auf einem Server, den Sie nur per SSH erreichen, lassen Sie Ihre aktuelle Sitzung offen und testen mit einer zweiten, bevor Sie sich abmelden.

Fragen

Was bedeutet Connection refused bei SSH?

Ihr Computer hat die Adresse erreicht, und die Maschine oder eine Firewall hat geantwortet, dass auf diesem Port nichts Verbindungen annimmt. SSH hat nie begonnen, Schlüssel und Passwörter sind also nicht die Ursache.

Wie prüfe ich, ob sshd läuft?

Führen Sie auf dem Server sudo systemctl status ssh aus (sshd auf Red-Hat-Systemen) und dann sudo ss -tlnp, um die Adressen und Ports zu sehen, auf denen er lauscht. Unter Ubuntu kann die Zeile systemd statt sshd zeigen, das ist normal.

Kann fail2ban Connection refused verursachen?

Ja. Seine Standardsperre weist neue Verbindungen von Ihrer Adresse ab. Funktioniert der Server aus einem anderen Netz, prüfen Sie sudo fail2ban-client status sshd.

Quellen

Mehr zu Fehlermeldungen

Alle Anleitungen