Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Ich erhalte die Fehler „Berechtigung verweigert (publickey)“ oder „Authentifizierung fehlgeschlagen, Berechtigung verweigert“, wenn ich versuche auf meine EC2-Instance zuzugreifen. Wie löse ich dieses Problem?

Lesedauer: 7 Minute
0

Ich erhalte die Fehler „Berechtigung verweigert (publickey)“ oder „Authentifizierung fehlgeschlagen, Berechtigung verweigert“ beim Zugriff auf meine Amazon-Elastic-Compute-Cloud-Instance (Amazon EC2).

Kurzbeschreibung

Fehler „Berechtigung verweigert (publickey)“ und „Authentifizierung fehlgeschlagen, Berechtigung verweigert“ treten auf, wenn:

  • Sie versuchen, eine Verbindung mit dem falschen Benutzernamen für Ihr AMI herzustellen.
  • Die Dateiberechtigungen innerhalb des Betriebssystems sind auf der Instance falsch.
  • Die falsche öffentliche SSH-Key-Datei (.pub) befindet sich in der Datei authorized\ _keys.

Lösung

Sicherstellen, dass Sie den richtigen Benutzernamen für Ihr AMI verwenden

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.

Stellen Sie sicher, dass die Dateiberechtigungen innerhalb des Betriebssystems korrekt sind und dass der richtige öffentliche SSH-Schlüssel in der Datei authorized_keys enthalten ist

Es gibt vier Methoden, um diese Aufgaben auszuführen:

Methode 1: Verwenden der seriellen EC2-Konsole

Wenn Sie die serielle EC2-Konsole für Linux aktiviert haben, können Sie damit Probleme mit unterstützten Nitro-basierten Instance-Typen 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 benötigt wird. Sie können die Amazon-EC2-Konsole oder AWS Command Line Interface (AWS CLI) verwenden, um auf die serielle Konsole zuzugreifen.

Bevor Sie die serielle Konsole verwenden, gewähren Sie auf Kontoebene Zugriff darauf. Erstellen Sie dann Richtlinien in AWS Identity and Access Management (IAM), 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 keinen Zugriff auf die serielle Konsole konfiguriert haben, folgen Sie den Anweisungen unter 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 beim Ausführen von Befehlen über AWS CLI Fehler auftreten, stellen Sie sicher, dass Sie die neueste Version von AWS CLI verwenden.

Methode 2: Verwenden Sie den AWS Systems Manager Session Manager, um sich bei der Instance anzumelden und Korrekturen vorzunehmen

Diese Methode aktualisiert die Berechtigungen und fügt Ihren öffentlichen SSH-Schlüssel in die Datei authorized_keys ein.

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 Is -Id, 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 Is -Id und die daraus resultierende Ausgabe. In diesem Beispiel ist ec2-user der Benutzername. Ändern Sie den Benutzernamen entsprechend Ihrem spezifischen AMI.

$ ls -ld /home/ec2-user/
drwx------ 3 ec2-user ec2-user 4096 Apr  1 08:31 /home/ec2-user/

4.    Überprüfen Sie auf Ihrem lokalen Computer den öffentlichen SSH-Schlüssel.

5.    Wenn die Signatur des öffentlichen SSH-Schlüssels in der Ausgabe nicht vorhanden ist, aktualisieren Sie die Datei authorized_keys, um Ihren SSH-Schlüssel zuzulassen. Ersetzen Sie im folgenden Beispiel den Beispielschlüssel durch Ihren öffentlichen SSH-Schlüssel.

$ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/ec2-user/.ssh/authorized_keys

6.    Führen Sie die folgenden Befehle auf Ihrer EC2-Instance aus, um die Berechtigungen zu korrigieren.

$ 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

7.    Beenden Sie die Sitzung.

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

**Methode 3: Führen Sie das AWSSupport-TroubleshootSSH-Automation-**Verfahren aus.

AWSSupport-TroubleshootSSH installiert das Amazon-EC2Rescue-Tool. Anschließend werden einige Probleme überprüft und behoben, die zu Remote-Verbindungsfehlern führen, wenn über SSH eine Verbindung zu einem Linux-Computer hergestellt wird. Weitere Informationen finden Sie unter Wie kann ich den AWSSupport-TroubleshootSSH-Automatisierungsworkflow verwenden, um SSH-Verbindungsprobleme zu beheben?

Methode 4: Verwenden Sie ein Benutzerdatenskript, um SSH-Berechtigungen zu reparieren und den richtigen öffentlichen SSH-Schlüssel zur Datei authorized_keys hinzuzufügen

Wichtig

  • Wenn Ihre Instance über einen Instance-Speicher gesichert ist oder über Instance-Speicher-Volumes verfügt, die Daten enthalten, gehen die Daten verloren, wenn Sie die Instance stoppen. Weitere Informationen finden Sie unter Den Root-Gerätetyp Ihrer Instance bestimmen.
  • Wenn Ihre Instance Teil einer Amazon-EC2-Auto-Scaling-Gruppe ist, führt das Stoppen der Instance möglicherweise zum Beenden der Instance. Instances, die Sie mit Amazon EMR, AWS CloudFormation oder AWS Elastic Beanstalk starten, sind möglicherweise Teil einer AWS Auto Scaling-Gruppe. Das Beenden der Instance hängt in diesem Szenario von den Instance-Skalierungs-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.
  • Durch das Stoppen und Starten der Instance 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.

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

2.    Wählen Sie im Navigationsbereich Instances aus und wählen Sie dann die Instance aus, die Sie starten möchten.

3.Stoppen Sie die Instance.

4.    Wählen Sie Aktionen, Instance-Einstellungen und 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
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chown $OS_USER:$OS_USER /home/$OS_USER -R
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
--//

Hinweis: Ersetzen Sie den Wert für OS_USER durch den Benutzernamen, der dem AMI zugeordnet ist, von dem aus Sie Ihre Instance gestartet haben. Weitere Informationen finden Sie unter Abrufen des Standardbenutzernamens für das AMI, mit dem Sie Ihre Instance gestartet haben in Häufige Ursachen für Verbindungsprobleme.

6.    Überprüfen Sie auf Ihrem lokalen Computer den öffentlichen SSH-Schlüssel.

7.    Wenn die Signatur des öffentlichen SSH-Schlüssels in der Ausgabe nicht vorhanden ist, hängen Sie den richtigen Schlüssel an das Benutzerdatenskript an, das Sie in Schritt 5 erstellt haben. Wenn die Signatur übereinstimmt, können Sie diesen Schritt überspringen. Hängen Sie den öffentlichen SSH-Schlüssel an das Benutzerdatenskript an, wie im folgenden Beispiel gezeigt. Ersetzen Sie den Beispielschlüssel durch Ihren öffentlichen SSH-Schlüssel.

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
OS_USER=@@@@@@
chown root:root /home
chmod 755 /home
chmod 700 /home/$OS_USER
chmod 700 /home/$OS_USER/.ssh
chmod 600 /home/$OS_USER/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVogCW5eZogRp+vF6Ut360b0bYyTmqgYaCXOyiW77I916AS5jFL3zsCtONbGn4hnG/UGGWXpLfUV85qpVJb38fskPZNuyZtjGjXM2W7qqbCZ1N9HBb6IPBaL97tmqBi+8rD7mSkoHc40sIV+KxkQSvD6AAFjQruCjxzfGIApnOvuj6IMsVEuFHBx4QhkbCzafxo02D9BZT4+dMy7tmyuC+UiNEQpgfFoszl+4VNFTIPlQQyn6CpUiV/rFXIadXsHqc+UOdVnfEXP+30YL75RHabze/1F5MY6t94AEcmcb05Dq4vwN9IjcxKmwgvxLOXzryytepvHQU+PobBEXAMPLE' >> /home/$OS_USER/.ssh/authorized_keys
chown $OS_USER:$OS_USER /home/$OS_USER -R
--//

Hinweis: Ersetzen Sie den Wert für OS_USER durch den Benutzernamen, der dem AMI zugeordnet ist, von dem aus Sie Ihre Instance gestartet haben. Weitere Informationen finden Sie unter Abrufen des Standardbenutzernamens für das AMI, mit dem Sie Ihre Instance gestartet haben in Häufige Ursachen für Verbindungsprobleme.

8.    Starten Sie Ihre Instance.

Hinweis: 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.

Um Benutzerdaten zu entfernen:

  • Führen Sie die Schritte 1-4 in diesem Abschnitt aus.
  • Löschen Sie das Benutzerdatenskript im Dialogfeld Benutzerdaten bearbeiten.

Verwandte Informationen

Wie behebe ich Probleme beim Herstellen einer Verbindung zu meiner Amazon-EC2-Linux-Instance mithilfe von SSH?

Ich habe meinen privaten Schlüssel verloren. Wie kann ich eine Verbindung zu meiner Linux-Instance herstellen?

Wie kann ich eine Verbindung zu meiner Amazon-EC2-Instance herstellen, wenn ich nach dem ersten Start mein SSH-Schlüsselpaar verloren habe?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren