Warum erhalte ich die Fehlermeldung „Server refused our key“, wenn ich versuche, über SSH eine Verbindung zu meiner EC2-Instance herzustellen?

Lesedauer: 7 Minute
0

Ich erhalte die Fehlermeldung „Server refused our key“, wenn ich über SSH eine Verbindung zu meiner Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2) herstelle.

Kurzbeschreibung

Es gibt mehrere Gründe, warum ein SSH-Server (sshd) einen privaten SSH-Schlüssel ablehnt. Im Folgenden sind einige häufige Gründe für diesen Fehler aufgeführt:

Lösung

Sie verwenden den falschen Benutzernamen für Ihr AMI, wenn Sie eine Verbindung zu Ihrer EC2-Instance herstellen

Eine Liste der gültigen Benutzernamen finden Sie unter Fehler: Der Server hat unseren Schlüssel abgelehnt oder es sind keine unterstützten Authentifizierungsmethoden verfügbar.

Der Benutzer, der versucht, auf die Instance zuzugreifen, wurde vom Server gelöscht oder das Konto wurde gesperrt

Wenn der Benutzer, der versucht, auf die Instance zuzugreifen, vom Server gelöscht wurde, fügen Sie den Benutzer wieder als neuen Benutzer hinzu. Weitere Informationen finden Sie unter Wie füge ich meiner Amazon-EC2-Linux-Instance neue Benutzerkonten mit SSH-Zugriff hinzu?

Es gibt Probleme mit den Berechtigungen für die Instance oder Ihnen fehlt ein Verzeichnis

Es gibt vier Methoden zur Überprüfung von Berechtigungen und Verzeichnissen auf der Instance:

Methode 1: Verwenden der seriellen EC2-Konsole

Wenn Sie die serielle EC2-Konsole für Linux aktiviert haben, können Sie die serielle Konsole verwenden, um Probleme mit unterstützten Nitro-basierten Instance-Typen zu beheben. Die serielle Konsole hilft Ihnen beim Beheben von Problemen bei Startvorgängen, Netzwerkkonfigurationen und SSH-Konfigurationen. Die serielle Konsole stellt eine Verbindung zu Ihrer Instance her, ohne dass eine funktionierende Netzwerkverbindung erforderlich ist. Sie können die Amazon-EC2-Konsole oder AWS Command Line Interface (AWS CLI) verwenden, um auf die serielle Konsole zugreifen.

Bevor Sie die serielle Konsole verwenden können, müssen Sie auf Kontoebene Zugriff darauf gewähren. Anschließend müssen Sie AWS-Identity-and-Access-Management-Richtlinien (IAM) erstellen, die Ihren IAM-Benutzern Zugriff gewähren. Außerdem muss jede Instance, die die serielle Konsole verwendet, mindestens einen passwortbasierten Benutzer enthalten. Wenn Ihre Instance nicht erreichbar ist und Sie den Zugriff auf die serielle Konsole nicht konfiguriert haben, folgen Sie den 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.

Methode 2: Verwenden von AWS Systems Manager Session Manager, um sich bei der Instance anzumelden und die Berechtigungen zu überprüfen

Hinweis: Für diese Methode ist die Installation des SSM-Agenten erforderlich. 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.    Starten Sie eine Sitzung.

3.    Verwenden Sie den Befehl stat, um sicherzustellen, dass die Berechtigungen der Dateien im Home-Verzeichnis korrekt sind. Im Folgenden finden Sie eine Liste der korrekten Berechtigungen:

  • Das Linux-Home-Verzeichnis, /home, sollte beispielsweise (0755/drwxr-xr-x) lauten.
  • Das Home-Verzeichnis des Benutzers, /home/ec2-user/, sollte beispielsweise (0700/drwx------) lauten.
  • Die .ssh-Verzeichnisberechtigung, /home/ec2-user/.ssh, sollte beispielsweise (0700/drwx------) lauten.
  • Die authorized_keys-Dateiberechtigung, /home/ec2-user/.ssh/authorized_keys, sollte beispielsweise (0600/-rw-------) lauten.

Das Folgende ist ein Beispiel für den Befehl stat und die daraus resultierende Ausgabe. In diesem Beispiel ist ec2-user der Benutzername. Ändern Sie den Benutzernamen entsprechend Ihrem spezifischen AMI:

$ stat /home/ec2-user/
  File: '/home/ec2-user/'
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 10301h/66305d	Inode: 18322       Links: 3
Access: (0700/drwx------)  Uid: (  500/ec2-user)   Gid: (  500/ec2-user)

4.    Wenn die Berechtigungen nicht mit den vorherigen Werten übereinstimmen, führen Sie die folgenden Befehle aus:

$ sudo chown root:root /home
$ sudo chmod 755 /home
$ sudo chown ec2-user:ec2-user /home/ec2-user -R
$ sudo chmod 700 /home/ec2-user /home/ec2-user/.ssh
$ sudo chmod 600 /home/ec2-user/.ssh/authorized_keys

5.    Beenden Sie die Sitzung.

6.    SSH zu Ihrer Instance.

Methode 3: Probleme, die den Fehler verursachen, automatisch beheben, indem Sie das AWSSupport-TroubleshootSSH-Dokument ausführen

Das AWSSupport-TroubleshootsSSH-Automatisierungsdokument installiert das Amazon-EC2Rescue-Tool auf der Instance und sucht anschließend nach einigen Problemen, die bei der Verbindung zu einem Linux-Computer über SSH zu Remote-Verbindungsfehlern führen, und behebt diese. Weitere Informationen finden Sie unter Ich erhalte Fehler, wenn ich versuche, mit SSH eine Verbindung zu meiner EC2-Instance herzustellen. Wie kann ich den AWSSupport-TroubleshootSSH-Automatisierungsworkflow verwenden, um SSH-Verbindungsprobleme zu beheben?

Methode 4: Verwenden von Benutzerdaten, um die Berechtigungen für die Instance zu korrigieren

Wichtig:

  • Für dieses Wiederherstellungsverfahren müssen Sie Ihre Instance stoppen und neu starten. Wenn Sie dies tun, gehen die Daten auf Instance-Speicher-Volumes verloren. Weitere Informationen finden Sie unter Den Root-Gerätetyp Ihrer Instance bestimmen.
  • Wenn Ihre Instance Teil einer Amazon-EC2-Auto-Scaling-Gruppe ist, wird die Instance möglicherweise beendet, wenn sie gestoppt wird. Dies kann auch bei Instances der Fall sein, die von Services gestartet werden, die AWS Auto Scaling verwenden, wie Amazon EMR, AWS CloudFormation, AWS Elastic Beanstalk usw. Das Beenden der Instance hängt in diesem Szenario von den Instance-Scale-In-Schutzeinstellungen 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 Lösungsschritten beginnen.
  • Wenn Sie die Instance stoppen und neu starten, wird die öffentliche IP-Adresse Ihrer Instance geändert. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an Ihre Instance eine elastische IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.
  • Sie können den SSH-Schlüssel nicht mithilfe von Benutzerdaten ändern, wenn das Root-Gerät Ihrer Instance ein Instance-Speichervolume ist. Weitere Informationen finden Sie unter Den Root-Gerätetyp Ihrer Instance bestimmen.
  • Die Aktualisierung der Benutzerdaten Ihrer Instance gilt für alle Distributionen, die Cloud-Init-Direktiven unterstützen. Cloud-Init muss installiert und konfiguriert sein, damit diese Anweisungen erfolgreich sind. Weitere Informationen zum Cloud-Init-SSH-Modul finden Sie unter SSH – Konfiguration von SSH- und SSH-Schlüsseln in der Cloud-Init-Dokumentation.

1.    Öffnen Sie die Amazon EC2-Konsole und wählen Sie dann Ihre Instance aus.

2.    Wählen Sie Instance-Status und dann Instance stoppen aus.

Hinweis: Wenn Stoppen nicht verfügbar ist, ist die Instance entweder bereits gestoppt oder ihr Root-Gerät ist ein Instance-Speichervolume.

3.    Wählen Sie Aktionen, Instance-Einstellungen und dann Benutzerdaten bearbeiten.

4.    Kopieren Sie das folgende Skript in das Feld Benutzerdaten, und wählen Sie dann Speichern aus. Achten Sie darauf, das gesamte Skript zu kopieren und keine zusätzlichen Leerzeichen hinzuzufügen.

Hinweis: Das folgende Skript verwendet den Benutzernamen ec2-user. Ändern Sie ec2-user in den Benutzernamen für Ihr AMI.

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
chown root:root /home
chmod 755 /home
chown ec2-user:ec2-user /home/ec2-user -R
chmod 700 /home/ec2-user /home/ec2-user/.ssh
chmod 600 /home/ec2-user/.ssh/authorized_keys
--//

5.    Starten Sie die Instance und verbinden Sie sich dann per SSH mit der Instance.

Hinweis: Standardmäßig wird das Benutzerdatenskript einmal pro Instance ausgeführt. Dieses Verfahren ändert das Standardverhalten und fügt den öffentlichen Schlüssel bei jedem Neustart, Stopp oder Start der Instance hinzu. Um das Standardverhalten wiederherzustellen, entfernen Sie die benutzerdefinierten Benutzerdaten. Als bewährte Methode sollten Sie die Auswirkungen auf die Sicherheit berücksichtigen, die sich daraus ergeben, dass Benutzerdaten nach dem ersten Start einer Instance ausgeführt werden. Sie können die Benutzerdaten einer Instance mit der API-Methode ModifyInstanceAttribute ändern. Verwenden Sie IAM-Richtlinien, um den Zugriff auf diese Methode einzuschränken.

Verwandte Informationen

Herstellen einer Verbindung mit einer Linux-Instance von Windows mithilfe von PuTTY

Amazon-EC2-Schlüsselpaare und Windows-Instances

Warum kann ich über SSH keine Verbindung zu meiner Amazon-EC2-Linux-Instance herstellen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr