Direkt zum Inhalt

Wie behebe ich die Fehler „Connection refused“ oder „Connection timed out“, wenn ich SSH verwende, um eine Verbindung zu meiner EC2-Instance herzustellen?

Lesedauer: 7 Minute
0

Ich erhalte die Fehlermeldung „Connection refused“ oder „Connection timed out“, wenn ich SSH verwende, um eine Verbindung zu meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance herzustellen.

Kurzbeschreibung

Wenn bei deiner Verbindung ein Timeout auftritt, erhältst du vom SSH-Client die folgende Fehlermeldung:

„ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection timed out“

Der Fehler Connection timed out tritt auf, wenn der Server nicht auf den Client reagiert und das Client-Programm aufgibt (Timeout).

Wenn ein Host deine Verbindung aus der Ferne ablehnt, erhältst du die folgende Fehlermeldung:

„ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Connection refused“

Lösung

Fehler „Connection timed out"

Wenn du den Fehler Connection timed out erhältst, überprüfe die folgenden Konfigurationen:

Hinweis: Um nach Problemen mit der Firewall oder den TCP-Wrappern zu suchen, musst du über Betriebssystem (OS)-Zugriff auf die Instance verfügen.

Fehler „Connection refused“

Wenn du den Fehler Connection refused erhältst, überprüfe die folgenden Konfigurationen:

  • Auf der Instance gibt es keine Firewall, die die SSH-Verbindung blockiert.
  • Der SSH-Daemon (sshd) wird ausgeführt und überwacht Port 22.

Hinweis: Um die vorherigen Konfigurationen zu überprüfen, benötigst du Zugriff auf die Instance auf Betriebssystemebene.

Probleme mit Instances beheben, die beide Zustandsprüfungen bestehen

Verwende eine der folgenden Methoden zur Problembehandlung, um Probleme mit Instances zu beheben, die ihre Zustandsprüfungen bestehen.

Das AWSSupport-TroubleshootSSH-Runbook ausführen

Es hat sich bewährt, das AWSSupport-TroubleshootSSH-Automatisierungs-Runbook auszuführen. Das Runbook installiert das **Amazon EC2Rescue-**Tool auf der Instance, um Probleme zu identifizieren und zu beheben, die eine Remote-SSH-Verbindung zu einem Linux-Host blockieren.

Verwendung der seriellen EC2-Konsole für Linux

Verwende die serielle EC2-Konsole für Linux, um Probleme auf Betriebssystemebene wie Boot-Probleme, Netzwerkkonfigurationsprobleme und SSH-Konfigurationsprobleme bei unterstützten Instance-Typen zu beheben.

Voraussetzungen:

  • Gewähre Zugriff auf die Konsole auf AWS-Kontoebene.
  • Erstelle AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement)-Richtlinien, die IAM-Benutzern ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configure-access-to-serial-console.html#sc-account-access-permissions)Zugriff auf die Konsole gewähren[.
    Hinweis: Jede Instance, die die serielle EC2-Konsole verwendet, muss mindestens einen passwortbasierten Linux-Benutzer mit Sudo-Zugriff haben.

Weitere Informationen findest du unter Zugriff auf die serielle EC2-Konsole konfigurieren.

Wenn kein Linux-Konto mit einem konfigurierten Anmeldepasswort vorhanden ist, musst du ssm-user ausführen, um das Passwort für ein Konto mit Sudo-Zugriff zurückzusetzen.

Gehe wie folgt vor, um zu überprüfen, ob deine Konfiguration den SSH-Zugriff nicht blockiert:

  1. Verwende die serielle EC2-Konsole, um als passwortkonfigurierter Linux-Benutzer eine Verbindung zur EC2-Instance herzustellen.

  2. Wenn du iptables-Regeln konfiguriert hast, führe den folgenden Befehl aus, um eine Regel in iptables hinzuzufügen, die alle SSH-Verbindungen auf Port 22 akzeptiert:

    sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
  3. Wenn du eine betriebssystembasierte Firewall verwendest, deaktiviere sie. Es hat sich bewährt, Sicherheitsgruppen anstelle einer Firewall zu verwenden. Um eine betriebssystembasierte Firewall zu deaktivieren, führe je nach Betriebssystem die folgenden Befehle aus.
    Wichtig: Die folgenden Befehle löschen alle wichtigen iptables-Regeln und vorhandene Regeln. Die Befehle fügen auch eine Regel hinzu, die eingehende SSH-Verbindungen zulässt, und ändern die Standardrichtlinie der Hauptkette in ACCEPT (Akzeptieren). Diese Konfiguration stellt sicher, dass du die Netzwerkkonnektivität der Instance nicht beeinträchtigst, wenn du die iptables-Regel löschst.
    Verteilungen, die UFW verwenden, wie Ubuntu und Debian:

    sudo iptables -F$ sudo iptables -P INPUT ACCEPT
    sudo ufw disable

    Verteilungen, die firewalld verwenden, wie Red Hat Enterprise Linux (RHEL) und CentOS:

    sudo iptables -F $ sudo iptables -P INPUT ACCEPT
    sudo systemctl disable firewalld

    Hinweis: Nachdem du wieder Zugriff auf deine Instance hast, überprüfe die Firewall-Konfiguration.

  4. Führe den folgenden Befehl aus, um zu überprüfen, ob SSH ausgeführt wird und ob sich der SSH-TCP-Port 22 im Lauschstatus befindet:

    sudo systemctl restart sshd$ sudo ss -tpln | grep -iE '22|ssh'LISTEN 0 128 *:22 *:* users:(("sshd",pid=1901,fd=3))
    LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=1901,fd=4))

    Hinweis: Wenn dein System den Befehl ss nicht hat, ersetze ss durch den Legacy-Befehl netstat. Stelle sicher, dass du dieselbe Syntax wie im vorherigen Befehl verwendest.

  5. Um sicherzustellen, dass der TCP-Wrapper keine SSH-Verbindung blockiert, führe den folgenden Befehl aus:

    if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
    then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
  6. Verwende SSH, um eine Verbindung zur Instance herzustellen.

  7. Trenne die Verbindung zur Sitzung der seriellen EC2-Konsole.

Systems Manager verwenden

Voraussetzungen: Um Session Manager, eine Funktion von AWS Systems Manager, verwenden zu können, muss deine Instance ein verwalteter Knoten sein. Der Ping-Status des AWS Systems Manager Agent (SSM Agent) der Instance muss Online sein, und die angefügte IAM-Rolle muss über AmazonSSMManagedInstanceCore-Berechtigungen verfügen. Stelle sicher, dass du alle Voraussetzungen für Session Manager erfüllst.

Verwende den Session Manager, um eine Sitzung für den Zugriff auf die Instance zu starten.

Verwendung eines Benutzerdatenskripts

Wenn du die oben genannten Methoden zur Problembehandlung nicht verwenden kannst, verwende ein Benutzerdatenskript, um die Firewall auf Betriebssystemebene und den TCP-Wrapper zu deaktivieren. Starte dann den sshd-Service neu.

Wichtig: Bevor du die Instance stoppst und startest, gehe wie folgt vor:

Hinweis: Wenn du eine Instance stoppst und startest, ändert sich die öffentliche IP-Adresse der Instance. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an die Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.

Gehe wie folgt vor, um Benutzerdaten für die Instance zu konfigurieren:

  1. Öffne die Amazon-EC2-Konsole.
  2. Wähle im Navigationsbereich Instances und dann deine Instance aus.
  3. Stoppe die Instance.
  4. Wähle Aktionen und dann Instance-Einstellungen aus.
  5. Wähle Benutzerdaten bearbeiten und gib dann das folgende Benutzerdatenskript ein:
    Content-Type: multipart/mixed; boundary="//"MIME-Version: 1.0
    
    --//
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [scripts-user, always]
    
    --//
    Content-Type:
        text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="userdata.txt"
    
    #!/bin/bash
    iptables -P INPUT ACCEPT
    iptables -F
    systemctl restart sshd.service || service sshd restart
    if [[ $( cat /etc/hosts.[ad]* | grep -vE '^#' | awk 'NF' | wc -l) -ne 0 ]];\
    then sudo sed -i '1i sshd2 sshd : ALL: allow' /etc/hosts.allow; fi
    --//
    Hinweis: Das vorherige Benutzerdatenskript ist so eingerichtet, dass es bei jedem Instance-Reboot ausgeführt wird. Diese Methode entfernt alle wichtigen iptables-Regeln.
  6. Wähle Speichern aus.
  7. Verwende SSH, um eine Verbindung zur Instance herzustellen.
  8. Nachdem du wieder Zugriff auf die Instance hast, entferne das Benutzerdatenskript und überprüfe dann, ob die Firewallkonfiguration korrekt ist.

Ähnliche Informationen

Fehler beim Herstellen einer Verbindung zur Instance: Zeitüberschreitung bei der Verbindung

Wie behebe ich Zeitüberschreitungsfehler bei Amazon-EC2-Instance-Verbindungen aus dem Internet?

Wie kann ich Probleme beim Herstellen einer Verbindung zu meiner Amazon-EC2-Linux-Instance über SSH beheben?

Warum ist meine EC2 Linux-Instance nicht erreichbar und besteht eine oder beide Statusprüfungen nicht?