it-swarm.com.de

Fügen Sie der vorhandenen EC2-Instanz ein Schlüsselpaar hinzu

Ich habe AWS Console-Zugriff auf ein Konto mit zwei ausgeführten Instanzen erhalten, das ich nicht herunterfahren kann (in der Produktion). Ich möchte jedoch SSH-Zugriff auf diese Instanzen erhalten. Ist es möglich, ein neues Schlüsselpaar zu erstellen und es auf die Instanzen anzuwenden, damit ich SSH ausführen kann? Das Abrufen der vorhandenen PEM-Datei für das Schlüsselpaar, unter dem die Instanzen erstellt wurden, ist derzeit keine Option.

Wenn dies nicht möglich ist, gibt es eine andere Möglichkeit, in die Instanzen zu gelangen?

224
Chris Wagner

Sie können ein Schlüsselpaar nicht auf eine laufende Instanz anwenden. Sie können das neue Schlüsselpaar nur zum Starten einer neuen Instanz verwenden.

Wenn es sich um ein EBS-Start-AMI handelt, können Sie es für die Wiederherstellung stoppen und einen Snapshot des Volumes erstellen. Erstellen Sie darauf basierend ein neues Volume. Und Sie können es wieder verwenden, um die alte Instanz zu starten, ein neues Image zu erstellen oder Daten wiederherzustellen.

Daten, die sich vorübergehend im Speicher befinden, gehen jedoch verloren.


Aufgrund der Beliebtheit dieser Frage und Antwort wollte ich die Informationen in dem Link festhalten, den Rodney zu seinem Kommentar gepostet hat.

Gutschrift geht an Eric Hammond für diese Information .

Reparieren von Dateien auf dem Root-EBS-Volume einer EC2-Instanz

Sie können Dateien auf dem Root-EBS-Volume auf einer EC2-Instanz untersuchen und bearbeiten, auch wenn Sie sich in einer von Ihnen als katastrophal erachteten Situation befinden:

  • Sie haben Ihren SSH-Schlüssel verloren oder Ihr Passwort vergessen
  • Sie haben einen Fehler beim Bearbeiten der Datei/etc/sudoers gemacht und können mit Sudo keinen Root-Zugriff mehr erhalten, um diesen Fehler zu beheben
  • Ihre lang laufende Instanz ist aus irgendeinem Grund hängen geblieben, kann nicht kontaktiert werden und kann nicht ordnungsgemäß gestartet werden
  • Sie müssen Dateien von der Instanz wiederherstellen, können jedoch nicht darauf zugreifen

Auf einem physischen Computer, der an Ihrem Schreibtisch sitzt, können Sie das System einfach mit einer CD oder einem USB-Stick starten, die Festplatte einbinden, die Dateien auschecken und reparieren und dann den Computer neu starten, um den Geschäftsbetrieb wieder aufzunehmen.

Eine Remote-EC2-Instanz scheint jedoch in einer dieser Situationen weit entfernt und unzugänglich zu sein. Glücklicherweise bietet uns AWS die Leistung und Flexibilität, um ein System wie dieses wiederherstellen zu können, vorausgesetzt, wir führen EBS-Boot-Instanzen und keinen Instance-Store aus.

Der Ansatz von EC2 ähnelt in etwa der physischen Lösung, aber wir werden die fehlerhafte „Festplatte“ (Root-EBS-Volume) in eine andere Instanz verschieben und dort einbinden, reparieren und dann zurückschieben.

In einigen Situationen ist es möglicherweise einfacher, eine neue EC2-Instanz zu starten und die fehlerhafte Instanz zu entfernen. Wenn Sie Ihre Dateien jedoch wirklich reparieren möchten, haben sich die folgenden Lösungsansätze für viele bewährt:

Setup

Identifizieren Sie die ursprüngliche Instanz (A) und das Volume, das das defekte Root-EBS-Volume enthält, mit den Dateien, die Sie anzeigen und bearbeiten möchten.

instance_a=i-XXXXXXXX

volume=$(ec2-describe-instances $instance_a |
  egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)

Identifizieren Sie die zweite EC2-Instanz (B), mit der Sie die Dateien auf dem ursprünglichen EBS-Volume reparieren möchten. Diese Instanz muss in derselben Verfügbarkeitszone wie Instanz A ausgeführt werden, damit das EBS-Volume daran angehängt werden kann. Wenn noch keine Instanz ausgeführt wird, starten Sie eine temporäre.

instance_b=i-YYYYYYYY

Stoppen Sie die fehlerhafte Instanz A (und warten Sie, bis sie vollständig gestoppt ist), trennen Sie das Root-EBS-Volume von der Instanz (und warten Sie, bis es getrennt ist) und hängen Sie das Volume dann an Instanz B auf einem nicht verwendeten Gerät an.

ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume

ssh auf Instanz B und mounten Sie das Volume, damit Sie auf sein Dateisystem zugreifen können.

ssh ...instance b...

Sudo mkdir -p 000 /vol-a
Sudo mount /dev/sdj /vol-a

Fix it

Zu diesem Zeitpunkt steht Ihr gesamtes Root-Dateisystem von Instanz A zum Anzeigen und Bearbeiten unter/vol-a auf Instanz B zur Verfügung. Sie möchten beispielsweise:

  • Legen Sie die richtigen SSH-Schlüssel in /vol-a/home/ubuntu/.ssh/authorized_keys ab
  • Bearbeiten und korrigieren Sie/vol-a/etc/sudoers
  • Suchen Sie nach Fehlermeldungen in/vol-a/var/log/syslog
  • Kopieren Sie wichtige Dateien aus/vol-a /…

Hinweis: Die UIDs der beiden Instanzen sind möglicherweise nicht identisch. Seien Sie also vorsichtig, wenn Sie Dateien erstellen, bearbeiten oder kopieren, die Nicht-Root-Benutzern gehören. Beispielsweise kann Ihr MySQL-Benutzer auf Instanz A dieselbe UID wie Ihr Postfix-Benutzer auf Instanz B haben, was zu Problemen führen kann, wenn Sie Dateien mit einem Namen abrufen und das Volume dann wieder auf A verschieben.

Zusammenfassung

Nachdem Sie fertig sind und mit den Dateien unter/vol-a zufrieden sind, hängen Sie das Dateisystem aus (immer noch auf Instanz-B):

Sudo umount /vol-a
Sudo rmdir /vol-a

Verschieben Sie nun das EBS-Volume mit ec2-api-tools auf Ihr System zurück in das Ausgangsverzeichnis der ursprünglichen Instanz A und starten Sie die Instanz erneut:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

Hoffentlich haben Sie das Problem behoben, Instanz A wird einwandfrei angezeigt, und Sie können das erreichen, was Sie ursprünglich geplant hatten. Wenn nicht, müssen Sie diese Schritte möglicherweise so lange wiederholen, bis sie funktionieren.

Hinweis: Wenn Sie Instanz A eine elastische IP-Adresse zugewiesen hatten, als Sie sie gestoppt haben, müssen Sie sie nach dem Neustart erneut zuordnen.

Merken! Wenn Ihre Instanz B nur für diesen Vorgang vorübergehend gestartet wurde, vergessen Sie nicht, sie jetzt zu beenden.

167
Rodney Quillo

Obwohl Sie einer laufenden EC2-Instanz kein Schlüsselpaar direkt hinzufügen können, können Sie einen Linux-Benutzer erstellen und ein neues Schlüsselpaar für ihn erstellen. Verwenden Sie es dann so, wie Sie es mit dem Schlüsselpaar des ursprünglichen Benutzers tun würden.

In Ihrem Fall können Sie den Instanzeigner (der ihn erstellt hat) bitten, folgende Schritte auszuführen. Auf diese Weise muss der Instanzeigner seine eigenen Schlüssel nicht für Sie freigeben, aber Sie können trotzdem in diese Instanzen sshen. Diese Schritte wurden ursprünglich von Utkarsh Sengar (aka @ zengr ) unter http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-Amazon- gepostet. ec2-instance / . Ich habe nur ein paar kleine Änderungen vorgenommen.

  1. Schritt 1: Standardmäßig "Ubuntu" Benutzer anmelden :

    $ ssh -i my_orig_key.pem [email protected]
    
  2. Schritt 2: Erstelle einen neuen Benutzer, wir werden unseren neuen Benutzer "john" nennen :

    [[email protected] ~]$ Sudo adduser john
    

    Setze das Passwort für "john" durch:

    [[email protected] ~]$ Sudo su -
    [[email protected] ubuntu]# passwd john
    

    Fügen Sie "john" der sudoer-Liste hinzu, indem Sie:

    [[email protected] ubuntu]# visudo
    

    .. und füge Folgendes am Ende der Datei hinzu:

    john   ALL = (ALL)    ALL
    

    In Ordung! Wir haben unseren neuen Benutzer erstellt. Nun müssen Sie die Schlüsseldatei generieren, die für die Anmeldung erforderlich ist, wie in Schritt 1 unter my_orin_key.pem.

    Verlasse das Spiel und gehe zurück zu Ubuntu, ohne Wurzel.

    [[email protected] ubuntu]# exit
    [[email protected] ~]$
    
  3. Schritt 3: Erstellen der öffentlichen und privaten Schlüssel :

    [[email protected] ~]$ su john
    

    Geben Sie das Kennwort ein, das Sie in Schritt 2 für „john“ erstellt haben. Erstellen Sie dann ein Schlüsselpaar. Denken Sie daran, dass die Passphrase für das Schlüsselpaar mindestens 4 Zeichen umfassen sollte.

    [[email protected] ubuntu]$ cd /home/john/
    [[email protected] ~]$ ssh-keygen -b 1024 -f john -t dsa
    [[email protected] ~]$ mkdir .ssh
    [[email protected] ~]$ chmod 700 .ssh
    [[email protected] ~]$ cat john.pub > .ssh/authorized_keys
    [[email protected] ~]$ chmod 600 .ssh/authorized_keys
    [[email protected] ~]$ Sudo chown john:ubuntu .ssh
    

    Im obigen Schritt ist John der Benutzer, den wir erstellt haben, und Ubuntu ist die Standardbenutzergruppe.

    [[email protected] ~]$ Sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Schritt 4: Jetzt müssen Sie nur noch den Schlüssel "john" herunterladen . Ich verwende scp, um Dateien von EC2 herunterzuladen/hochzuladen. Hier ist, wie Sie es tun können.

    Sie müssen die Datei weiterhin mit ubuntu user kopieren, da Sie nur den Schlüssel für diesen Benutzernamen haben. Sie müssen also den Schlüssel in den Ubuntu-Ordner verschieben und auf 777 ändern.

    [[email protected] ~]$ Sudo cp john /home/ubuntu/
    [[email protected] ~]$ Sudo chmod 777 /home/ubuntu/john
    

    Kommen Sie jetzt zum Terminal des lokalen Computers, wo Sie die Datei my_orig_key.pem haben, und gehen Sie folgendermaßen vor:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem [email protected]:/home/ubuntu/john john
    

    Der obige Befehl kopiert den Schlüssel "john" in das aktuelle Arbeitsverzeichnis auf Ihrem lokalen Computer. Nachdem Sie den Schlüssel auf Ihren lokalen Computer kopiert haben, sollten Sie "/ home/ubuntu/john" löschen, da es sich um einen privaten Schlüssel handelt.

    Nun eins deiner lokalen Rechner chmod john auf 600.

    $ chmod 600 john
    
  5. Schritt 5: Zeit zum Testen Ihres Schlüssels :

    $ ssh -i john [email protected]
    

Auf diese Weise können Sie mehrere Benutzer für die Verwendung einer EC2-Instanz einrichten !!

87
Eye

Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus:

ssh-keygen -t rsa -C "SomeAlias"

Nachdem dieser Befehl ausgeführt wurde, wird eine Datei mit der Endung * .pub generiert. Kopieren Sie den Inhalt dieser Datei.

Bearbeiten Sie auf dem Amazon-Computer ~/.ssh/authorized_keys und fügen Sie den Inhalt der * .pub-Datei ein (und entfernen Sie zuerst alle vorhandenen Inhalte).

Sie können dann SSH mit der anderen Datei ausführen, die mit dem Befehl ssh-keygen (dem privaten Schlüssel) erstellt wurde.

11
Dan

Dies ist mir früher passiert (ich hatte keinen Zugriff auf eine EC2-Instanz, die von einer anderen Person erstellt wurde, aber Zugriff auf die AWS-Webkonsole), und ich habe die Antwort gebloggt: http://readystate4.com/2013/04/09/ aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to /

Grundsätzlich können Sie das EBS-Laufwerk trennen und an einen EC2 anschließen, auf den Sie Zugriff haben. Fügen Sie Ihren SSH-Pub-Schlüssel zu ~ec2-user/.ssh/authorized_keys Auf diesem angeschlossenen Laufwerk hinzu. Setzen Sie es dann wieder auf die alte EC2-Instanz. Schritt für Schritt in der Verknüpfung mit Amazon AMI.

Sie müssen keine Snapshots erstellen oder eine neue geklonte Instanz erstellen.

7
Mauvis Ledford

In meinem Fall habe ich diese Dokumentation verwendet, um ein Schlüsselpaar mit meiner Instanz von Elastic Beanstalk zu verknüpfen

Wichtig

Sie müssen ein Amazon EC2-Schlüsselpaar erstellen und Ihre von Elastic Beanstalk bereitgestellten Amazon EC2-Instanzen so konfigurieren, dass sie das Amazon EC2-Schlüsselpaar verwenden, bevor Sie auf Ihre von Elastic Beanstalk bereitgestellten Amazon EC2-Instanzen zugreifen können. Sie können Ihre Amazon EC2-Schlüsselpaare mithilfe der AWS Management Console einrichten. Anweisungen zum Erstellen eines Schlüsselpaars für Amazon EC2 finden Sie im Handbuch Erste Schritte mit Amazon Elastic Compute Cloud.

Konfigurieren von Amazon EC2-Serverinstanzen mit Elastic Beanstalk

5
Kamal Essajidi

Ich habe keine einfache Möglichkeit gefunden, ein neues Schlüsselpaar über die Konsole hinzuzufügen, aber Sie können dies manuell tun.

Einfach mit dem vorhandenen Schlüsselpaar in Ihre EC2-Box ssh. Bearbeiten Sie dann die ~/.ssh/authorized_keys und fügen Sie den neuen Schlüssel in eine neue Zeile ein. Beenden Sie und ssh über die neue Maschine. Erfolg!

4
ninja123

Sie können der Instanz einfach mit dem folgenden Befehl einen neuen Schlüssel hinzufügen:

ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias

Sie können domain_alias in ~/.ssh config konfigurieren

Host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem
4
karser

Sobald eine Instanz gestartet wurde, besteht keine Möglichkeit, das der Instanz zugeordnete Schlüsselpaar auf Metadatenebene zu ändern. Sie können jedoch den SSH-Schlüssel ändern, mit dem Sie eine Verbindung zur Instanz herstellen .

stackoverflow.com/questions/7881469/change-key-pair-for-ec2-instance

3
YetAnotherMatt