Wenn ich versuche, mit SSH eine Verbindung zu meiner EC2 Instance herzustellen, erhalte ich die Fehlermeldung „verweigerte Verbindung“ oder „Zeitüberschreitung bei der Verbindung“. Wie löse ich dieses Problem?

Lesedauer: 9 Minute
0

Wenn ich versuche, mit SSH eine Verbindung zu meiner Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) herzustellen, erhalte ich die Fehlermeldung „verweigerte Verbindung“ oder „Zeitüberschreitung bei der Verbindung“.

Kurzbeschreibung

Fehlermeldung: „ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Zeitüberschreitung bei der Verbindung“. Diese Fehlermeldung stammt vom SSH-Client. Die Fehlermeldung weist darauf hin, dass der Server nicht auf den Client reagiert hat und dass das Client-Programm abgebrochen hat (Zeitüberschreitung). Im Folgenden sind die häufigsten 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 Host existiert nicht.

Fehlermeldung: „ssh: connect to host ec2-X-X-X-X.compute-1.amazonaws.com port 22: Verbindung verweigert“. Diese Nachricht wurde aus der Ferne von einem Host gesendet. Im Folgenden sind die häufigsten Ursachen für diesen Fehler aufgeführt:

  • Der Host hat die Instance erreicht, aber es gab keinen Service, der den SSH-Port überwachte.
  • Eine Firewall blockierte das Paket. Sie wurde so eingerichtet, dass das Paket zurückgewiesen anstatt gelöscht wird.

Lösung

Fehler „Zeitüberschreitung bei der Verbindung"

Überprüfen Sie für den Fehler „Zeitüberschreitung bei der Verbindung“ Folgendes:

  • Die IP-Adresse oder der Hostname der Instance sind korrekt.
  • Die Instance besteht ihre Zustandsprüfung.
  • Die Sicherheitsgruppe der Instance lässt eingehenden Verkehr auf TCP-Port 22 zu.
  • Die Netzwerk-ACLs des Instance-Subnetzes ermöglichen eingehenden Datenverkehr auf TCP-Port 22 und ermöglichen einen kurzlebigen Port für den ausgehenden Verkehr.
  • Die Routing-Tabelle des Instance-Subnetzes ist ordnungsgemäß konfiguriert, um eine Verbindung zwischen der EC2-Instance und dem SSH-Client herzustellen.
  • Es gibt keine Firewall, welche die Verbindung zwischen dem SSH-Client und der EC2-Instance blockiert.
  • SSH wird von den TCP-Wrappern der Instance (auf der Red Hat-Website) nicht blockiert.

**Hinweis:**Für die letzten beiden Überprüfungsschritte ist Zugriff auf die Instance auf Betriebssystemebene erforderlich.

Fehler „Verbindung verweigert“

Überprüfen Sie für den Fehler „Verbindung verweigert“ Folgendes:

  • Es gibt keine Firewall auf der Instance, die die SSH-Verbindung ablehnt.
  • Der SSH-Daemon (sshd) läuft und überwacht Port 22.

**Hinweis:**Für beide Überprüfungsschritte ist Zugriff auf die Instance auf Betriebssystemebene erforderlich.

Wenn die Instance beide Zustandsprüfungen besteht, verwenden Sie eine der folgenden vier aufgelisteten Methoden für Ihre Konfiguration

  • Methode 1: Verwenden Sie die serielle EC2-Konsole für Linux.
  • Methode 2: Verwenden Sie den AWS Systems Manager Session Manager.
  • Methode 3: Führen Sie das AWSSupport-TroubleshootSSH-Automatisierungs-Runbook aus.
  • Methode 4: Verwenden Sie ein Benutzerdatenskript.

Methode 1: Verwenden Sie die serielle EC2-Konsole für Linux

Falls konfiguriert, können Sie die serielle EC2-Konsole für Linux verwenden, um Probleme auf Betriebssystemebene auf unterstützten Nitro-basierten Instance-Typen zu beheben. Die serielle Konsole hilft Ihnen bei der Behebung von Startproblemen, Netzwerkkonfigurations- und SSH-Konfigurationsproblemen. Sie können über die Amazon-EC2-Konsole oder das 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 eine AWS-Identity-and-Access-Management-Richtlinien (IAM), die Ihren IAM-Benutzern Zugriff gewähren.

**Hinweis:**Jede Instance, die die serielle Konsole verwendet, muss mindestens einen passwortbasierten Linux-Benutzer mit Sudo-Zugriff enthalten.

Informationen zur Konfiguration der seriellen EC2-Konsole für Linux finden Sie unter Konfigurieren des Zugriffs auf die serielle EC2-Konsole. Wenn kein Linux-Konto mit einem konfigurierten Anmeldekennwort vorhanden ist, müssen Sie ssm-Benutzer ausführen, um das Passwort für ein Konto mit Sudo-Zugriff zurückzusetzen. Weitere Informationen zum Ausführen von ssm-Benutzer-Befehlen finden Sie unter Verwaltung der Sudo-Kontoberechtigungen für ssm-Benutzer unter Linux und macOS.

Stellen Sie nach der Konfiguration mit einem passwortkonfigurierten Linux-Benutzer über die serielle EC2-Konsole eine Verbindung zur EC2 Instance her.

Führen Sie die folgenden Befehle aus. Diese Befehle überprüfen, ob die SSH-Verbindungen nicht durch die Betriebssystem-Firewall oder den TCP-Wrapper blockiert werden. Die Befehle überprüfen auch, ob der sshd-Service läuft und Port 22 überwacht.

1.    Wenn Sie die iptables-Regeln konfiguriert haben, führen Sie den folgenden Befehl aus, um eine Regel in iptables hinzuzufügen, die alle SSH-Verbindungen auf dem Standardport 22 akzeptiert:

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

Da es sich bewährt hat, Sicherheitsgruppen anstelle einer auf dem Betriebssystem basierenden Firewall zu verwenden, kann die Firewall vollständig deaktiviert werden. Verwenden Sie je nach Betriebssystem einen der folgenden Befehle, um die betriebssystembasierte Firewall zu deaktivieren:

**Wichtig:**Die folgenden Befehle löschen alle wichtigen iptables-Regeln. Sie fügen auch eine Regel hinzu, die eingehende SSH-Verbindungen zulässt. Darüber hinaus ändern sie die Standardrichtlinie der Hauptkette auf ACCEPT, sodass das Leeren der iptables-Regel keine Auswirkungen auf die Netzwerkverbindung der Instance hat. Da diese Befehle alle wichtigen iptables löschen, löschen sie auch alle vorhandenen Regeln.

Distributionen, die UFW verwenden (Ubuntu, Debian)

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

Distributionen, die firewalld verwenden (Red Hat, CentOS)

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

**Hinweis:**Nachdem Sie wieder Zugriff auf Ihre Instance haben, überprüfen Sie Ihre Firewall-Konfiguration (UFW, Firewalld, iptables).

2.    Stellen Sie sicher, dass SSH läuft und stellen Sie sicher, dass sich der SSH-TCP-Port (22) im Überwachungsstatus 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 Ihr System nicht über den Befehl ss verfügt, können Sie den veralteten Befehl netstat mit derselben Syntax verwenden, die im vorherigen Beispiel gezeigt wurde.

3.    Stellen Sie sicher, dass der TCP-Wrapper keine SSH-Verbindung blockiert:

$ 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

4.    Stellen Sie als Nächstes mit SSH eine Verbindung zur Instance her.

5.    Trennen Sie die Sitzung der seriellen EC2-Konsole, wenn sie nicht mehr benötigt wird.

Methode 2: Verwenden Sie den AWS Systems Manager Session Manager

**Hinweis:**Um diese Methode verwenden zu können, muss es sich bei der Instance um eine von SSM verwaltete Instance handeln und ihr Ping-Status des SSM-Agenten muss online sein. Weitere Informationen zu Session Manager und eine vollständige Liste der Voraussetzungen finden Sie unter Session Manager einrichten.

Um zu überprüfen, ob SSH-Verbindungen nicht durch die Firewall oder den TCP-Wrapper blockiert werden und der sshd-Service auf Port 22 läuft und ihn überwacht:

1.    Öffnen Sie den AWS Systems Manager.

2.    Starten Sie eine Sitzung für die Instance mit dem Sitzungs-Manager.

3.    Folgen Sie den Schritten 1 bis 4 von Methode 1: Verwenden Sie die serielle EC2-Konsole für Linux.

4.    Schließen Sie die Session-Manager-Sitzung, wenn sie nicht mehr benötigt wird.

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

Das AWSSupport-TroubleshootSSH-Automatisierungsrunbook installiert das Amazon EC2Rescue Tool für Linux auf der Instance. Dieses Tool sucht nach Problemen, die eine Remoteverbindung zum Linux-Host über SSH verhindern und versucht, diese zu beheben.

Um das AWSSupport-TroubleshootSSH-Runbook auszuführen:

1.    Öffnen Sie die Seite AWSSupport-TroubleshootSSH.

2.    Wählen Sie Diese Automatisierung ausführen (Konsole) aus.

Weitere Informationen finden Sie unter Ich erhalte Fehlermeldungen, wenn ich versuche, über SSH eine Verbindung zu meiner EC2-Instance herzustellen. Wie kann ich den AWSSupport-TroubleshootSSH-automationworkflow verwenden, um SSH-Verbindungsprobleme zu beheben?

Methode 4: Verwenden Sie ein Benutzerdatenskript

Wenn keine der beschriebenen Methoden für Ihre Umgebung geeignet ist, verwenden Sie ein EC2-Benutzerdatenskript. Das EC2-Benutzerdatenskript deaktiviert die Firewall auf Betriebssystemebene und den TCP-Wrapper und startet dann den sshd-Service neu.

Wichtig:

  • Dieses Verfahren erfordert ein Stoppen und Starten der EC2 Instance. Wenn die Instance über Daten verfügt, die auf Instance-Speichervolumes gespeichert sind, werden diese Daten nach dem Stoppen der Instance gelöscht.
  • Wenn die Instance Teil einer Amazon-EC2-Auto-Scaling-Gruppe ist, werden durch das Beenden der Instance möglicherweise auch Instances innerhalb der Auto-Scaling-Gruppe gestoppt.
  • Wenn die Instance von Services gestartet wird, die AWS Auto Scaling verwenden, werden durch das Beenden der Instance möglicherweise auch Instances innerhalb der Auto-Scaling-Gruppe gestoppt.
  • Die Beendigung der Instance hängt von den Instance Scale-In-Schutzeinstellungen für die 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 Lösungsschritten beginnen.
  • Durch das Stoppen und Starten der Instance wird die öffentliche IP-Adresse Ihrer Instance geändert. Es hat sich bewährt, eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden, wenn Sie externen Datenverkehr an Ihre Instance weiterleiten.

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

1.    Öffnen Sie die Amazon-EC2-Konsole.

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

3.    Stoppen Sie die Instance.

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

5.    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 -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
--//

6.    Stellen Sie mit SSH eine Verbindung zur Instance her.

7.    Das vorstehende Benutzerdatenskript ist so eingerichtet, dass es bei jedem Neustart der Instance ausgeführt wird. Nachdem Sie wieder Zugriff auf die Instance erhalten haben, entfernen Sie das Benutzerdatenskript.

**Hinweis:**Der vorstehende Befehl löscht alle wichtigen iptables-Regeln. Nachdem Sie wieder Zugriff auf die Instance erhalten haben, überprüfen Sie die Firewall-Konfiguration auf Richtigkeit (z. B. UFW, firewalld, iptables).

Um Benutzerdaten zu entfernen:

1.    Führen Sie die Schritte 1 bis 4 der **Methode 4 aus: Verwenden Sie einen **Skriptabschnitt für Benutzerdaten.

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

Weitere Informationen

Fehler beim Herstellen einer Verbindung zu Ihrer 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?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr