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

239

Ich habe AWS Console Zugriff auf ein Konto mit zwei laufenden Instanzen erhalten, die ich (in der Produktion) nicht herunterfahren kann. 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?

Chris Wagner
quelle
Haben Sie die Lösung hier ausprobiert : stackoverflow.com/questions/1454629/… ? ssh-addsollte tun, was Sie brauchen.
Marc Bollinger
Es ist schön, die Funktion ssh-add zu lernen, aber das hilft nicht, da dieser Benutzer die Instanz tatsächlich mit dem von ihm erstellten Schlüsselpaar erstellt hat. Die Instanzen, auf die ich mich beziehe, wurden mit einem anderen Schlüsselpaar erstellt, auf das ich keinen Zugriff habe.
Chris Wagner
1
Vielleicht
Claude Vedovini
4
Sie können kein Schlüsselpaar auf eine laufende Instanz anwenden.
Rodney Quillo

Antworten:

172

Sie können kein Schlüsselpaar 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-Boot-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 bei kurzlebiger Speicherung gehen jedoch verloren.


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

Kredit geht an Eric Hammond für diese Informationen .

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

Sie können Dateien auf dem Root-EBS-Volume einer EC2-Instanz untersuchen und bearbeiten, selbst wenn Sie sich in einer für Sie katastrophalen Situation befinden, wie:

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

Auf einem physischen Computer an Ihrem Schreibtisch 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 wieder im Geschäft zu sein.

Eine entfernte EC2-Instanz scheint jedoch entfernt und unzugänglich zu sein, wenn Sie sich in einer dieser Situationen befinden. Glücklicherweise bietet uns AWS die Leistung und Flexibilität, um ein solches System wiederherstellen zu können, vorausgesetzt, wir führen EBS-Startinstanzen und keinen Instanzspeicher aus.

Der Ansatz auf EC2 ähnelt in gewisser Weise der physischen Lösung, aber wir werden die fehlerhafte „Festplatte“ (Root-EBS-Volume) verschieben und auf eine andere Instanz montieren, beheben und dann zurück verschieben.

In einigen Situationen ist es möglicherweise einfacher, eine neue EC2-Instanz zu starten und die fehlerhafte Instanz wegzuwerfen. Wenn Sie Ihre Dateien jedoch wirklich reparieren möchten, ist hier der Ansatz, der für viele funktioniert hat:

Konfiguration

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. 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 defekte Instanz A (warten Sie, bis sie vollständig zum Stillstand gekommen ist), trennen Sie das Root-EBS-Volume von der Instanz (warten Sie, bis sie getrennt wird) 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 das Dateisystem zugreifen können.

ssh ...instance b...

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

Repariere es

Zu diesem Zeitpunkt kann Ihr gesamtes Root-Dateisystem von Instanz A unter / vol-a auf Instanz B angezeigt und bearbeitet werden. Beispielsweise möchten Sie möglicherweise:

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

Hinweis: Die Benutzeroberflächen 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 hat Ihr MySQL-Benutzer in Instanz A möglicherweise dieselbe UID wie Ihr Postfix-Benutzer in Instanz B, was zu Problemen führen kann, wenn Sie Dateien mit einem Namen chownieren und das Volume dann wieder auf A verschieben.

Einpacken

Wenn Sie fertig sind und mit den Dateien unter / vol-a zufrieden sind, heben Sie das Dateisystem auf (noch auf Instanz B):

sudo umount /vol-a
sudo rmdir /vol-a

Zurück auf Ihrem System mit ec2-api-tools, verschieben Sie das EBS-Volume weiter auf die ursprüngliche 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 Instanz A beim Stoppen eine elastische IP-Adresse zugewiesen wurde, müssen Sie sie nach dem erneuten Starten erneut zuordnen.

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

Rodney Quillo
quelle
Können Sie uns eine Schritt-für-Schritt-Anleitung dazu geben (oder darauf hinweisen)? In meinem Fall habe ich eine vorhandene laufende Instanz und muss mich von einem Remotestandort aus anmelden, an dem ich keinen privaten Schlüssel habe.
Jus12
87

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 und es dann wie beim Schlüsselpaar des ursprünglichen Benutzers verwenden.

In Ihrem Fall können Sie die Instanz Besitzer fragen (die es geschaffen) folgendes zu tun. Somit muss der Instanzbesitzer seine eigenen Schlüssel nicht mit Ihnen teilen, aber Sie könnten trotzdem in diese Instanzen ssh. Diese Schritte wurden ursprünglich von Utkarsh Sengar (aka. @Zengr ) unter http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/ veröffentlicht . Ich habe nur ein paar kleine Änderungen vorgenommen.

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

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

    [ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
    

    Legen Sie das Passwort für "john" fest von:

    [ubuntu@ip-11-111-111-111 ~]$ sudo su -
    [root@ip-11-111-111-111 ubuntu]# passwd john
    

    Fügen Sie "John" zu Sudoers Liste hinzu, indem Sie:

    [root@ip-11-111-111-111 ubuntu]# visudo
    

    .. und fügen Sie am Ende der Datei Folgendes hinzu:

    john   ALL = (ALL)    ALL
    

    In Ordung! Wir haben unseren neuen Benutzer erstellt. Jetzt müssen Sie die Schlüsseldatei generieren, die zum Anmelden benötigt wird, wie wir es in Schritt 1 mit my_orin_key.pem getan haben.

    Beenden Sie nun und kehren Sie zu Ubuntu zurück, ohne Wurzel.

    [root@ip-11-111-111-111 ubuntu]# exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Schritt 3: Erstellen der öffentlichen und privaten Schlüssel :

    [ubuntu@ip-11-111-111-111 ~]$ su john
    

    Geben Sie das Passwort 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 lang sein sollte.

    [john@ip-11-111-111-111 ubuntu]$ cd /home/john/
    [john@ip-11-111-111-111 ~]$ ssh-keygen -b 1024 -f john -t dsa
    [john@ip-11-111-111-111 ~]$ mkdir .ssh
    [john@ip-11-111-111-111 ~]$ chmod 700 .ssh
    [john@ip-11-111-111-111 ~]$ cat john.pub > .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ chmod 600 .ssh/authorized_keys
    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh
    

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

    [john@ip-11-111-111-111 ~]$ 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 erfahren Sie, wie Sie dies tun können.

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

    [john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/
    [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
    

    Kommen Sie nun 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
    

    Mit dem obigen Befehl wird der Schlüssel "john" in das aktuelle Arbeitsverzeichnis auf Ihrem lokalen Computer kopiert. 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.

    Jetzt ist eine Ihrer lokalen Maschinen 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 !!

Auge
quelle
4
Dies ist nützlich, aber sollten Sie als letzten Schritt nicht auch den privaten Schlüssel vom Remote-Computer löschen? Auf diese Weise können andere Personen mit Zugriff auf die Instanz diese nicht kopieren und sich mit Ihrem Schlüssel anmelden.
culix
Das funktioniert bei mir. Aber wie navigiere ich von hier aus zum Ubuntu-Benutzer, da sich die Dateien, an denen ich arbeiten werde, im Ubuntu-Benutzerverzeichnis befinden. Dies bringt mich zu John User Group. Ubuntu 14.04.4 LTS
Olyjosh
Das hat bei mir nicht funktioniert. Es gab ungültige Berechtigungen. Ich musste ein Schlüsselpaar von der ec2-Konsole erstellen, dann fing es an zu funktionieren
Dark Knight
11

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 / autorisierte_Tasten 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) generiert wurde.

Dan
quelle
Wie bereits von @Dan erwähnt, ist es möglich, den Zugriff auf Ihre Instanz zu ändern, indem Sie diese Datei bearbeiten. Sie können jedoch das der Instanz zugeordnete Schlüsselpaar auf Metadatenebene nie ändern. Vergessen Sie nicht, den Namen der .pem-Datei am Ende Ihres publicKey hinzuzufügen, z. B.:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo Mutti
7

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-Zugriff auf eine ec2-Instanz, bei der Sie den Zugriff auf / verloren haben

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 ~ec2-user/.ssh/authorized_keysauf diesem angeschlossenen Laufwerk hinzu. Setzen Sie es dann wieder auf die alte EC2-Instanz. Schritt für Schritt in den Link mit Amazon AMI.

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

Mauvis Ledford
quelle
6

In meinem Fall habe ich diese Dokumentation verwendet, um meiner Instanz von Elastic Beanstalk ein Schlüsselpaar zuzuordnen

Wichtig

Sie müssen ein Amazon EC2-Schlüsselpaar erstellen und Ihre von Elastic Beanstalk bereitgestellten Amazon EC2-Instanzen so konfigurieren, dass sie das von Amazon EC2 bereitgestellte 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 Amazon Elastic Compute Cloud-Handbuch Erste Schritte.

Konfigurieren von Amazon EC2-Serverinstanzen mit Elastic Beanstalk

Kamal Essajidi
quelle
1
Danke, @ kamal-essajidi! Für andere Benutzer von EB: Sobald Sie ein Schlüsselpaar haben, können Sie es unter Konfiguration> Instanzen> EC2-Schlüsselpaar zu Ihrer elastischen Bohnenstange hinzufügen.
Scott
4

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 der Konfiguration ~ / .ssh konfigurieren

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

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

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

ninja123
quelle
3

Sobald eine Instanz gestartet wurde, gibt es 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

Noch ein anderes Matt
quelle
2

In Elasticbeanstalk-Umgebungen können Sie ein Schlüssel-Wert-Paar auf eine laufende Instanz wie folgt anwenden:

  • Erstellen Sie ein Schlüssel-Wert-Paar aus EC2 -> Schlüsselpaare (unter der Registerkarte NETZWERK & SICHERHEIT).
  • Gehen Sie zu Elasticbeanstalk und klicken Sie auf Ihre Anwendung
  • Gehen Sie zur Konfigurationsseite und ändern Sie die Sicherheitseinstellungen
  • Wählen Sie Ihr EC2-Schlüsselpaar und klicken Sie auf Übernehmen
  • Klicken Sie auf Bestätigen, um das Update zu bestätigen. Dadurch wird die Umgebung beendet und der Schlüsselwert auf Ihre Umgebung angewendet.
Kerem
quelle
0

Sie können tatsächlich ein Schlüsselpaar über die Konfigurationsseite für elastische Bohnenstangen hinzufügen. Anschließend wird Ihre Instanz für Sie neu gestartet und alles funktioniert.

Vishwas Vaishnav
quelle