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: 27.04.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: „Error connecting to [instance], reason: Connection timed out: connect“ (Fehler bei der Verbindung mit [Instance], Grund: Zeitüberschreitung der Verbindung: verbinden) bezieht sich auf Probleme mit der Konnektivität zur Instance, was bedeutet, dass die Anforderung die Instance nicht erreicht und eine Zeitüberschreitung erfolgt. Dies kann passieren, wenn SSH auf der Instance nicht ausgeführt wird oder wenn eine Firewall den Zugriff blockiert.

Fehlermeldung: "ssh: connect to host ec2-X-X-X-X.compute-1 .amazonaws.com Port 22: Connection refused“ zeigt an, dass die Instance die Verbindung abgelehnt hat oder der SSH-Service-Daemon nicht ausgeführt wird. Dieser Fehler kann auch auftreten, wenn eine Firewall den Zugriff auf die Instance ablehnt.

Auflösung

Überprüfen Sie Folgendes:

  • Es gibt keine Firewall, die die Verbindung blockiert.
  • Der SSH-Service wird auf der Instance ausgeführt.
  • Der SSH-TCP-Port 22 befindet sich im empfangsbereiten Zustand.

Es gibt vier Methoden zum Ausführen dieser Aufgaben:

Methode 1: Verwenden Sie die serielle EC2-Konsole

Wenn Sie EC2-Serial-Konsole für Linux aktiviert haben, dann können Sie damit unterstützte Nitro-basierte Instance-Typen-Fehler 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.

Bevor Sie die serielle Konsole verwenden, gewähren Sie auf Kontoebene Zugriff darauf. Erstellen Sie dann AWS-Identity-and-Access-Management(IAM)-Richtlinien, 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, befolgen Sie die Anweisungen in Methode 2, 3 oder 4. Informationen zum Konfigurieren der seriellen EC2-Konsole für Linux finden Sie unter Konfigurieren Sie den Zugriff 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: Verwenden des AWS Systems Manager Session Manager

Hinweis: Installation des SSM-Agenten ist erforderlich, um diese Methode zu verwenden. Weitere Informationen zu Session Manager und eine vollständige Liste der Voraussetzungen finden Sie unter Session Manager einrichten.

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

2. Vortrag starten.

3.    Führen Sie die folgenden Befehle aus, um Firewalls zu deaktivieren und den SSH-Service neu zu starten.

$ sudo iptables -F
$ sudo service sshd restart

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

4.    Stellen Sie sicher, dass sich der SSH-TCP-Port (22) in einem empfangsbereiten Zustand befindet.

$ sudo netstat -tnlp | grep :22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      849/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      849/sshd

5.    Vortrag beenden.

6.    Stellen Sie über SSH eine Verbindung zur Instance her.

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

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 Wie kann ich AWSSupport-TroubleshootSSH-Automatisierungs-Workflow zur Behebung von SSH-Verbindungsproblemen verwenden?

Methode 4: Verwenden eines Benutzerdatenskripts

Wichtig

  • Dieses Verfahren erfordert das Stoppen und Starten 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 Sie die Root-Gerätetyp 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., dann kann das Anhalten der Instance die Instance beenden. Das Anhalten der Instance in diesem Szenario hängt von der Skalierungsschutzeinstellung für Ihre Auto Scaling-Gruppe ab. Wenn Ihre Instance Teil einer Auto-Scaling-Gruppe ist, dann entfernen Sie die Instance vorübergehend aus der Auto-Scaling-Gruppe, bevor Sie mit den Auflösungsschritten beginnen.
  • Beim Stoppen und Starten der Instance ändert sich die öffentliche IP-Adresse Ihrer Instance. 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.    Anzeigen der EC2-Instance-Konsolenprotokolle. 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 dann die Instance aus, zu der Sie eine Verbindung herstellen möchten.

4. Instance anhalten.

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 für Port 22. Nachdem Sie wieder Zugriff auf Ihre Instance haben, überprüfen Sie Ihre Firewall-Konfiguration (z. B. ufw, firewalld, iptables).

7.    Stellen Sie über SSH eine Verbindung zur Instance her.

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

So entfernen Sie Nutzerdaten:

1.    Führen Sie die Schritte 1 bis 4 in der Methode 4 aus: Verwenden Sie einen Abschnitt mit einem Benutzerdatenskript.

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