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

Lesedauer: 6 Minute
0

Ich erhalte die Fehlermeldung „Server refused our key“, wenn ich über SSH eine Verbindung zu meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance 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

Du verwendest den falschen Benutzernamen für dein AMI, wenn du versuchst, eine Verbindung zur Amazon EC2-Instance herzustellen

Die üblichen Benutzernamen sind ec2-user, ubuntu, centos, root oder admin. Eine Liste der gültigen Benutzernamen findest du unter Fehler: Der Server hat unseren Schlüssel abgelehnt oder es sind keine unterstützten Authentifizierungsmethoden verfügbar.

Der Benutzer wurde vom Server gelöscht oder das AWS-Konto wurde gesperrt

Wenn der Benutzer, der versucht, auf die Instance zuzugreifen, vom Server gelöscht wird, füge den Benutzer wieder als neuen Benutzer hinzu. Weitere Informationen findest du 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 dir fehlt ein Verzeichnis

Es gibt vier Methoden, um Berechtigungen und Verzeichnisse auf der Instance zu überprüfen:

Methode 1: Verwendung der seriellen EC2-Konsole

Wenn du die serielle Amazon EC2-Konsole für Linux aktivierst, kannst du die serielle Konsole zur Fehlerbehebung bei unterstützten Nitro-basierten Instance-Typen verwenden. Du kannst über die Amazon-EC2-Konsole oder AWS Command Line Interface (AWS CLI) auf die serielle Konsole zugreifen. Weitere Informationen findest du unter Zugriff auf die serielle EC2-Konsole konfigurieren.

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

Hinweis: Für die Verwendung dieser Methode ist die Installation des SSM-Agenten erforderlich. Weitere Informationen zu Session Manager und eine vollständige Liste der Voraussetzungen findest du unter Session Manager einrichten.

  1. Öffne die AWS Systems Manager-Konsole.

  2. Starte eine Sitzung.

  3. Verwende den Befehl stat, um sicherzustellen, dass die Berechtigungen der Dateien im Stamm-Verzeichnis korrekt sind. Im Folgenden findest du eine Liste der Beispiele für richtige Berechtigungen:
    Linux-Stammverzeichnis, /home, (0755/drwxr-xr-x).
    Stammverzeichnis des Benutzers, /home/ec2-user/, (0700/drwx------).
    .ssh-Verzeichnisberechtigung, /home/ec2-user/.ssh, (0700/drwx------).
    Dateiberechtigung authorized_keys, /home/ec2-user/.ssh/authorized_keys, (0600/-rw-------).
    Das Folgende ist ein Beispiel für den Befehl stat und die Ausgabe. In diesem Beispiel ist ec2-user der Benutzername. Ändere den Benutzernamen in dein spezifisches 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ühre 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. Beende die Sitzung.

  6. SSH zu deiner Instance.

Methode 3: Führe das Dokument AWSSupport-TroubleshootSSH aus, um Probleme, die den Fehler verursachen, automatisch zu korrigieren

Das Automatisierungsdokument AWSSupport-TroubleshootSSH installiert das Amazon EC2Rescue-Tool auf der Instance. Und dann sucht und korrigiert das Automatisierungsdokument Probleme, die während einer Linux-Maschinenverbindung über SSH zu Fernverbindungsfehlern führen. Weitere Informationen findest du unter Ich erhalte Fehler, wenn ich versuche, mit SSH eine Verbindung zu meiner EC2-Instance herzustellen. Wie kann ich den AWSSupport-TroubleshootSSH-Automatisierungsablauf 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 musst du deine Instance stoppen und neu starten. Wenn du dies tust, gehen die Daten auf Instance-Speicher-Volumes verloren. Weitere Informationen findest du unter Stamm-Volumes für die Amazon EC2-Instances.
  • Wenn die 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 oder AWS Elastic Beanstalk. Die Beendigung der Instance hängt in diesem Szenario von den Schutzeinstellungen für das Instance-Scale-in für die Auto-Scaling-Gruppe ab. Wenn deine Instance Teil einer Auto-Scaling-Gruppe ist, entferne die Instance aus der Auto-Scaling-Gruppe, bevor du mit den Lösungsschritten beginnst. Du kannst die Instance wieder zur Auto-Scaling-Gruppe hinzufügen, nachdem du die Lösungsschritte abgeschlossen hast.
  • Ein Stopp und ein Neustart der Instance ändern die öffentliche IP-Adresse der Instance. Es empfiehlt sich, beim Weiterleiten von externem Datenverkehr an die Instance eine Elastic-IP-Adresse anstelle einer öffentlichen IP-Adresse zu verwenden.
  • Du kannst den SSH-Schlüssel nicht mithilfe von Benutzerdaten ändern, wenn das Root-Gerät der Instance ein Instance-Speichervolume ist. Weitere Informationen findest du unter Stamm-Volumes für die Amazon EC2-Instances.
  • Die Aktualisierung der Benutzerdaten der Instance gilt für alle Verteilungen, die Cloud-Init-Anweisungen unterstützen. Cloud-init muss installiert und konfiguriert sein. Weitere Informationen findest du unter SSH – SSH und SSH-Schlüssel konfigurieren auf der Cloud-init-Website.

Führe die folgenden Schritte aus:

  1. Öffne die Amazon-EC2-Konsole und wähle dann deine Instance aus.

  2. Wähle 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ähle Aktionen, Instance-Einstellungen und dann Benutzerdaten bearbeiten.

  4. Kopiere den folgenden Befehl in das Feld Benutzerdaten, und wähle dann Speichern aus. Stelle sicher, dass du den gesamten Befehl kopierst und keine zusätzlichen Leerzeichen hinzufügst.
    Hinweis: Der folgende Befehl verwendet den Benutzernamen ec2-user. Ändere ec2-user in den Benutzernamen für dein 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. Starte die Instance und verwende dann SSH, um eine Verbindung mit der Instance herzustellen.
    Hinweis: Standardmäßig wird der Befehl für den Benutzernamen 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, entferne die benutzerdefinierten Benutzerdaten. Es hat sich bewährt, die Sicherheitsprotokolle zu befolgen und die Ausführung von Benutzerdaten nach dem ersten Start einer Instance zuzulassen. Ändere die Benutzerdaten einer Instance mit der ModifyInstanceAttribute-API-Methode. Verwende IAM-Richtlinien, um den Zugriff auf diese Methode einzuschränken.

Ähnliche Informationen

Mithilfe von PuTTY eine Verbindung zur Linux-Instance herstellen

Amazon EC2-Schlüsselpaare und Amazon EC2-Instances

Wie kann ich Probleme beim Herstellen einer Verbindung zu meiner Amazon-EC2-Linux-Instance über SSH beheben?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 9 Monaten