"ssh: connect to host port 22: Operation timed out" / "Connection timed out" beheben

Ihr Verbindungsversuch bekam überhaupt keine Antwort. Etwas auf dem Weg hat ihn stillschweigend verworfen, meist eine Cloud-Firewall oder Security Group, oder die Adresse ist falsch oder die Maschine ist aus. Führen Sie nc -vz 203.0.113.10 22 aus und prüfen Sie dann auf dem Server, ob die Pakete ankommen. macOS sagt Operation timed out, Linux sagt Connection timed out. Es ist derselbe Fehler.

Ein Server ohne öffentliche Adresse? Wardterm erreicht ihn über einen Jump-Host, den Sie einmal speichern. Zeigen

Aktualisiert am . Nachgestellt mit OpenSSH 10.3 unter macOS gegen eine unerreichbare Testadresse und mit OpenSSH 10.0 unter Debian 13 mit einer iptables-DROP-Regel.

Die Meldung

Unter macOS:

ssh: connect to host 203.0.113.10 port 22: Operation timed out

Unter Linux:

ssh: connect to host 203.0.113.10 port 22: Connection timed out

Ihr Computer hat eine Anfrage zum Öffnen einer Verbindung gesendet und nichts zurückgehört. SSH hat nie begonnen, Schlüssel und Passwörter sind also nicht beteiligt.

Wie es sich von Connection refused unterscheidet

Wir haben jeden Fall auf einem Testserver aufgebaut, und das hat ssh ausgegeben:

SituationMeldungWas sie Ihnen sagt
Firewall-Regel auf DropConnection timed outNichts hat geantwortet
Firewall-Regel auf RejectConnection refusedEtwas hat mit Nein geantwortet
Nichts lauscht auf dem PortConnection refusedDie Maschine hat mit Nein geantwortet
Keine Route auf Ihrem eigenen RechnerNetwork is unreachableIhr Computer hat keinen Weg zum Probieren

Schauen Sie also aufs Netzwerk, nicht auf sshd. Bekommen Sie eine Abweisung, gehen Sie zu Connection refused.

Schnell testen

Standardmäßig können Sie bei jedem Fehlschlag eine Minute oder länger warten. ConnectTimeout verkürzt das Warten:

ssh -o ConnectTimeout=5 user@203.0.113.10

Testen Sie nur den Port, zuerst unter Linux, dann unter macOS:

nc -vz -w 5 203.0.113.10 22
nc -vz -G 5 203.0.113.10 22

Prüfen Sie dann, was Ihre Konfiguration für diesen Namen wirklich verwendet:

ssh -G server | grep -E '^(hostname|port) '

Ursachen, nach Wahrscheinlichkeit geordnet

1. Eine Cloud-Firewall oder Security Group blockiert Sie

Cloud-Firewalls verwerfen normalerweise, was sie nicht erlauben, ohne Antwort. Prüfen Sie, dass eine eingehende Regel TCP-Port 22 von Ihrer aktuellen öffentlichen Adresse erlaubt. Eine häufige Falle ist eine Regel für eine einzelne Adresse, nachdem sich Ihre Heim- oder Büroadresse geändert hat.

Prüfen Sie bei AWS außerdem die Routing-Tabelle des Subnetzes, die Network-ACL und ob die Instance eine öffentliche Adresse hat, wie in der AWS-Anleitung unten beschrieben. Andere Anbieter haben ähnliche Einstellungen unter anderen Namen.

2. Die Adresse ist falsch, oder die Maschine ist aus

dig +short server
ping -c 3 203.0.113.10

Vergleichen Sie das Ergebnis mit der Adresse, die Ihr Anbieter anzeigt, die sich nach einem Stopp und Start ändern kann. Ping allein beweist wenig: Viele Server blockieren es, keine Antwort heißt also nicht, dass der Server aus ist. Prüfen Sie den Zustand der Maschine in der Konsole des Anbieters.

3. Eine Firewall auf dem Server verwirft es

Das zeigt, ob Ihre Pakete den Server überhaupt erreichen. Führen Sie es in der Konsole des Anbieters aus, während Sie versuchen, sich zu verbinden:

sudo tcpdump -ni any 'tcp port 22'
  • Keine Pakete: Sie werden vor dem Server blockiert, prüfen Sie also Cloud-Firewall, Router und Route.
  • Pakete kommen an, keine Antwort: Die eigene Firewall des Servers verwirft sie, oder die Antwort geht einen anderen Weg hinaus.

Listen Sie die Regeln des Servers mit sudo iptables -L INPUT -n oder sudo nft list ruleset auf und suchen Sie eine Drop-Regel für Port 22.

4. Ihr eigenes Netz blockiert Port 22

Hotels, Büros und manche öffentlichen WLANs blockieren ausgehendes SSH. Der Hinweis: Es schlägt in einem Netz fehl und funktioniert in einem anderen. Probieren Sie einen Handy-Hotspot oder einen anderen SSH-Server aus demselben Netz.

5. Ein Routing-Problem

traceroute -n 203.0.113.10

Sterne bei einigen Hops sind normal, weil viele Router nicht antworten. Sehen Sie, wo der Pfad endgültig aufhört. Unter Linux sendet diese Variante TCP an Port 22, was durch mehr Firewalls geht, und sie braucht Root:

sudo traceroute -n -T -p 22 203.0.113.10

Hat der Server keine öffentliche Adresse, erreichen Sie ihn von außerhalb seines privaten Netzes nicht direkt. Nutzen Sie ein VPN oder einen Jump-Host.

Timeout während des Handshakes

Diese Meldung ist anders:

Connection timed out during banner exchange
Connection to 203.0.113.10 port 22 timed out

Der Port hat die Verbindung angenommen, aber es kam nicht rechtzeitig eine SSH-Begrüßung zurück. Wir haben sie mit einem Test-Listener erhalten, der die Verbindung annahm und dann schwieg, mit gesetztem ConnectTimeout. Der Netzwerkweg funktioniert also. Schauen Sie auf den Server: eine überlastete oder festgefahrene Maschine, ein anderer Dienst als SSH auf diesem Port oder eine Middlebox, die die Verbindung festhält. ConnectTimeout gilt auch für diese Phase, ein sehr niedriger Wert kann auf einem langsamen Server also die Meldung auslösen.

Ein Timeout in Ihrer Konfiguration setzen

Das behebt nichts, aber Fehler kommen schneller zurück, und Skripte hängen nicht:

Host *
    ConnectTimeout 10

Weitere Einstellungen pro Host finden Sie in diesen Beispielen für die ssh-config-Datei.

Fragen

Was ist der Unterschied zwischen Connection timed out und Connection refused?

Timed out heißt, dass nichts geantwortet hat, meist eine Firewall, die Pakete verwirft. Refused heißt, dass etwas mit Nein geantwortet hat: Auf dem Port lauscht nichts, oder eine Firewall weist ab.

Wie lasse ich SSH schneller scheitern?

Mit ssh -o ConnectTimeout=5 benutzer@server, oder Sie setzen ConnectTimeout 10 unter Host * in ~/.ssh/config.

Warum läuft SSH bei AWS in einen Timeout?

Meist fehlt in der Security Group eine eingehende Regel für TCP-Port 22 von Ihrer aktuellen Adresse. Prüfen Sie auch die Network ACL, die Routing-Tabelle und ob die Instanz eine öffentliche Adresse hat.

Quellen

Mehr zu Fehlermeldungen

Alle Anleitungen