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 Server | Von Ihrem Computer | Wahrscheinliche Ursache |
|---|---|---|
Keine sshd-Zeile in ss | Abgewiesen | sshd ist gestoppt oder schlägt fehl |
| sshd auf einem anderen Port | Auf 22 abgewiesen | Falscher Port |
sshd nur auf 127.0.0.1 | Abgewiesen | ListenAddress |
sshd auf 0.0.0.0:22 | Abgewiesen | Firewall weist ab, oder eine Sperre |
sshd auf 0.0.0.0:22 | Funktioniert aus einem anderen Netz | Eine 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
- sshd_config(5), OpenBSD-Handbuch
- sshd(8), OpenBSD-Handbuch
- sshd nutzt jetzt Socket-Aktivierung, Ubuntu