Ich erhalte die Fehler „Connection refused“ (Verbindung verweigert) oder „Connection timed out“ (Zeitüberschreitung der Verbindung), wenn ich versuche, mit SSH eine Verbindung zu meiner EC2-Instance herzustellen. Wie kann ich dies beheben?

Letzte Aktualisierung: 08.10.2021

Ich erhalte die Fehlermeldungen „Connection refused“ oder „Connection timed out“, wenn ich versuche, eine Verbindung zu meiner Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) über SSH herzustellen. Wie kann ich dies beheben?

Kurzbeschreibung

Fehlermeldung: „ssh: Verbindung zum Host ec2-X-X-X-X-X.compute-1.amazonaws.com Port 22: Verbindungs-Timeout“. Diese Fehlermeldung stammt vom SSH-Client. Der Fehler zeigt an, dass der Server nicht auf den Client reagiert hat und das Clientprogramm aufgegeben hat (Zeitüberschreitung). Im Folgenden sind häufige Ursachen für diesen Fehler aufgeführt:

  • Die Sicherheitsgruppe oder Netzwerk-ACL erlaubt keinen Zugriff.
  • Auf dem Betriebssystem der Instance befindet sich eine Firewall.
  • Zwischen dem Client und dem Server befindet sich eine Firewall.
  • Der Gastgeber existiert nicht.

Fehlermeldung: „ssh: Verbindung zum Host ec2-X-X-X-X.compute-1.amazonaws.com Port 22: Verbindung verweigert“. Diese Nachricht stammt von einem Host remote. Im Folgenden sind häufige Ursachen für diesen Fehler aufgeführt:

  • Der Host erreichte die Instance, aber es gab keinen Service, der auf dem SSH-Port lauschte.
  • Eine Firewall blockierte und sollte das Paket ablehnen, anstatt es fallen zu lassen.

Auflösung

Überprüfen Sie Folgendes:

Es gibt vier Methoden zum Ausführen dieser Aufgaben:

Methode 1: Verwenden Sie die serielle EC2-Konsole

Wenn Sie die serielle EC2-Konsole für Linux einrichten, können Sie damit unterstützte Nitro-basierte Instance-Typen beheben. Die serielle Konsole hilft Ihnen bei der Behebung von Startproblemen, Netzwerkkonfigurations- und SSH-Konfigurationsproblemen. Die serielle Konsole stellt eine Verbindung zu Ihrer Instance her, ohne dass eine funktionierende Netzwerkverbindung erforderlich ist. Sie können über die Amazon-EC2-Konsole oder die AWS Command Line Interface (AWS CLI) auf die serielle Konsole zugreifen.

Gewähren Sie vor der Verwendung der seriellen Konsole Zugriff auf Kontoebene. Erstellen Sie dann AWS-Identity-and-Access-Management-Richtlinien (IAM), die Ihren IAM-Benutzern Zugriff gewähren. Außerdem muss jede Instance, die die serielle Konsole verwendet, mindestens einen kennwortbasierten Benutzer enthalten. Wenn Ihre Instance nicht erreichbar ist und Sie den Zugriff auf die serielle Konsole nicht konfiguriert haben, dann befolgen Sie die Anweisungen in Methode 2, 3 oder 4. Informationen zur Konfiguration der seriellen EC2-Konsole für Linux finden Sie unter Konfigurieren des Zugriffs auf die serielle EC2-Konsole.

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS CLI verwenden.

Methode 2: Verwendung des AWS-Systems-Manager-Sitzungsmanagers

Hinweis: Die Installation des SSM-Agenten ist erforderlich, um diese Methode zu verwenden. Weitere Informationen zum Sitzungsmanager und eine vollständige Liste der Voraussetzungen finden Sie unter Einrichten des Sitzungsmanagers.

1.    Öffnen Sie die AWS-Systems-Manager-Konsole.

2.    Starte eine Sitzung.

3.    Fügen Sie die folgende zusätzliche Zeile am Anfang der Regeltabelle hinzu und starten Sie dann den SSH-Service neu:

$ sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
$ sudo service sshd restart

Oder Sie können die Firewall deaktivieren. Es ist eine bewährte Methode, Sicherheitsgruppen anstelle einer Firewall zu verwenden.

Verwenden Sie je nach Betriebssystem einen der folgenden Befehlssätze, um die Firewall zu deaktivieren:

Ubuntu benutzt eine unkomplizierte Firewall

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

Distributionen, die Firewalls verwenden (z. B. Red Hat oder CentOS)

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

Hinweis: Der vorhergehende Befehl bereinigt alle Hauptregeln von iptables und fügt eine hinzu, die eingehende SSH-Verbindungen zulässt. Berücksichtigen Sie dies, bevor Sie diese Befehle ausführen, da Sie möglicherweise andere Regeln haben, die für Ihr Setup erforderlich sind. Nachdem Sie wieder Zugriff auf Ihre Instance haben, überprüfen Sie Ihre Firewall-Konfiguration (z. B. UFW, firewalld, iptables).

4.    Stellen Sie sicher, dass SSH läuft, und stellen Sie sicher, dass sich der SSH-TCP-Port (22) in einem Listening-Zustand befindet.

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

Hinweis: Wenn Ihr System nicht über den Befehl ss verfügt, können Sie den Legacy-Befehl netstat mit derselben Syntax verwenden, die im vorherigen Beispiel gezeigt wurde.

5.    Beenden Sie die Sitzung.

6.    Verbinden Sie sich mit SSH mit der Instance.

Methode 3: Führen Sie das AWSSupport-TroubleshootSSH-Automatisierungsdokument aus

Das AWSSupport-TroubleshootSSH-Automatisierungsdokument installiert das Amazon-EC2Rescue-Tool auf der Instance. Dieses Tool überprüft und behebt einige Probleme, die beim Herstellen einer Verbindung mit einem Linux-Computer über SSH zu Remote-Verbindungsfehlern führen. Weitere Informationen finden Sie unter Ich erhalte Fehler, wenn ich versuche, mithilfe von SSH eine Verbindung zu meiner EC2-Instance herzustellen. Wie kann ich den AWSSupport-TroubleshootSSH-Automatisierungsworkflow verwenden, um SSH-Verbindungsprobleme zu beheben?

Methode 4: Verwenden Sie ein Benutzerdatenskript

Wichtig

  • Dieses Verfahren erfordert einen Stopp und Start Ihrer EC2-Instance. Beachten Sie, dass die Daten verloren gehen, wenn die Instance gestoppt wird, wenn Ihre Instance durch den Instance-Speicher gesichert ist oder über Instance-Speicher-Volumes mit Daten verfügt. Weitere Informationen finden Sie unter Bestimmen des Root-Gerätetyps Ihrer Instance.
  • Wenn Ihre Instance Teil einer Amazon-EC2-Auto-Scaling-Gruppe ist oder wenn Ihre Instance von Services gestartet wird, die AWS Auto Scaling verwenden, wie Amazon EMR, AWS CloudFormation, AWS Elastic Beanstalk usw., kann das Stoppen der Instance die Instance beenden. Die Beendigung der Instance in diesem Szenario hängt von den Instance-Skalierungsschutzeinstellungen für Ihre Auto-Scaling-Gruppe ab. Wenn Ihre Instance Teil einer Auto-Scaling-Gruppe ist, entfernen Sie die Instance vorübergehend aus der Auto-Scaling-Gruppe, bevor Sie mit den Auflösungsschritten beginnen.
  • Durch das Stoppen und Starten der Instance wird die öffentliche IP-Adresse Ihrer Instance geändert. Es ist eine bewährte Methode, beim Weiterleiten von externem Datenverkehr an Ihre Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.

1.    Zeigen Sie die Protokolle der EC2-Instance-Konsole an. Der folgende Eintrag wird in den EC2-Instance-Konsolenprotokollen angezeigt, wenn UFW aktiviert ist.

systemd[1] : starting Uncomplicated Firewall
Starting Uncomplicated firewall...

2.    Öffnen Sie die Amazon EC2-Konsole.

3.    Wählen Sie im Navigationsbereich Instances und wählen Sie dann die Instance aus, mit der Sie eine Verbindung herstellen möchten.

4.    Stoppen Sie die Instance.

5.    Wählen Sie Aktionen, Instance-Einstellungen, Benutzerdaten bearbeiten.

6.    Kopieren Sie das folgende Benutzerdatenskript in das Dialogfeld Benutzerdaten bearbeiten und wählen Sie dann Speichern.

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 -F
service sshd restart
--//

Hinweis: Der obige Befehl löscht alle wichtigen iptables-Regeln, nicht nur die Regeln für Port 22. Nachdem Sie wieder Zugriff auf Ihre Instance haben, überprüfen Sie Ihre Firewall-Konfiguration (z. B. UFW, firewalld, iptables).

7.    Verbinden Sie sich mit SSH mit der Instance.

8.    Das vorhergehende Benutzerdatenskript wird so eingestellt, dass es bei jedem Neustart der Instance ausgeführt wird. Nachdem Sie wieder Zugriff auf Ihre Instance erhalten haben, entfernen Sie das Benutzerdatenskript.

So entfernen Sie Benutzerdaten:

1.    Führen Sie die Schritte 1–4 im Abschnitt Methode 4: Verwenden eines Benutzerdatenskripts aus.

2.    Löschen Sie das Benutzerdatenskript im Dialogfeld Benutzerdaten bearbeiten.