Dodaj Keypair do istniejącej instancji EC2

Otrzymałem dostęp konsoli AWS do konta z uruchomionymi 2 instancjami, których nie mogę wyłączyć (w produkcji). Chciałbym jednak uzyskać dostęp SSH do tych wystąpień, czy możliwe jest utworzenie nowej pary klawiszy i zastosowanie jej do wystąpień, aby móc SSH? Pobieranie pliku PEM dla pary klawiszy, w której zostały utworzone instancje, nie jest obecnie możliwe.

Jeśli to nie jest możliwe, czy jest jakiś inny sposób, aby dostać się do instancji?

Author: gvasquez, 2010-07-16

8 answers

Nie można zastosować pary klawiszy do uruchomionej instancji. Nowej funkcji keypair można używać tylko do uruchamiania nowej instancji.

Do odzyskiwania, jeśli jest to EBS boot AMI, możesz go zatrzymać, zrobić migawkę woluminu. Utwórz nowy wolumin na jego podstawie. Możesz użyć go z powrotem, aby uruchomić starą instancję, utworzyć nowy obraz lub odzyskać dane.

Chociaż dane w efemerycznym przechowywaniu zostaną utracone.


Ze względu na popularność tego pytania i odpowiedzi, chciałem uchwycić informacje w linku, który Rodney zamieścił w swoim komentarzu.

Kredyt idzie do Eric Hammond za tę informację.

W przypadku wystąpienia EC2 pliki są zapisywane na woluminie EBS głównego instancji EC2.]}

Możesz sprawdzać i edytować pliki na głównym woluminie EBS na instancji EC2, nawet jeśli znajdujesz się w tak katastrofalnej sytuacji, jak:

  • zgubiłeś swój klucz ssh lub zapomniałeś hasła
  • popełniłeś błąd edytując plik/etc / sudoers i nie może już uzyskaj dostęp do roota za pomocą sudo, aby to naprawić]}
  • twoja długotrwała instancja jest zawieszona z jakiegoś powodu, nie może być i nie uruchamia się poprawnie
  • musisz odzyskać pliki z instancji, ale nie możesz się do niej dostać

Na fizycznym komputerze siedzącym przy biurku, możesz po prostu uruchomić system za pomocą płyty CD lub pamięci USB, zamontować dysk twardy, sprawdzić i naprawić pliki, a następnie ponownie uruchomić komputer, aby wrócić do pracy.

Zdalny EC2 instancja wydaje się jednak odległa i niedostępna, gdy znajdujesz się w jednej z tych sytuacji. Na szczęście AWS zapewnia nam moc i elastyczność, aby móc odzyskać taki system, pod warunkiem, że uruchamiamy instancje rozruchowe EBS, a nie instance-store.

Podejście do EC2 jest nieco podobne do rozwiązania fizycznego, ale przenosimy i montujemy wadliwy "dysk twardy" (root EBS volume) do innej instancji, naprawiamy ją, a następnie przenosimy z powrotem.

W niektórych sytuacje, może po prostu łatwiej jest uruchomić nową instancję EC2 i wyrzucić złą, ale jeśli naprawdę chcesz naprawić swoje pliki, oto podejście, które działało dla wielu:

Setup

Zidentyfikuj oryginalną instancję (a) i wolumin zawierający uszkodzony główny wolumin EBS wraz z plikami, które chcesz wyświetlić i edytować.

instance_a=i-XXXXXXXX

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

Zidentyfikuj drugą instancję EC2 (B), której użyjesz do naprawy plików na oryginalnym woluminie EBS. Ta instancja musi być działa w tej samej strefie dostępności co instancja A, dzięki czemu może mieć dołączony wolumin EBS. Jeśli nie masz jeszcze uruchomionej instancji, Uruchom tymczasową.

instance_b=i-YYYYYYYY

Zatrzymaj uszkodzoną instancję A (czekając, aż dojdzie do całkowitego zatrzymania), odłącz główny wolumin EBS od instancji (czekając, aż zostanie odłączony), a następnie podłącz wolumin do instancji B na nieużywanym urządzeniu.

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

Ssh do wystąpienia B i zamontowania woluminu, aby uzyskać dostęp do jego pliku system.

ssh ...instance b...

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

Fix It

W tym momencie cały główny system plików z instancji A jest dostępny do przeglądania i edycji pod /vol-a na instancji B. na przykład możesz chcieć:

  • umieść prawidłowe klucze ssh w /vol-a/home / ubuntu/.ssh / authorized_keys
  • [[28]} Edycja i naprawa / vol-a / etc / sudoers W tym celu należy zwrócić uwagę na to, że nie jest to konieczne.]}
  • kopiowanie ważnych plików z /vol-a/ ...

Uwaga: uids na dwie instancje mogą nie być identyczne, więc uważaj, jeśli tworzysz, edytujesz lub kopiujesz pliki należące do użytkowników innych niż root. Na przykład użytkownik mysql w instancji a może mieć taki sam UID jak użytkownik postfix w instancji B, co może powodować problemy, jeśli chowasz pliki o jednej nazwie, a następnie przenosisz wolumin z powrotem do A.

Wrap Up

Gdy skończysz i będziesz zadowolony z plików w /vol-a, odmontuj system plików (nadal włączony instancja-B):

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

Teraz wróć do systemu za pomocą ec2-api-tools, Kontynuuj przenoszenie woluminu EBS z powrotem do jego domu na oryginalnej instancji A i uruchom ponownie instancję:

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

Mam nadzieję, że naprawiłeś problem, instancja A wychodzi dobrze i możesz osiągnąć to, co pierwotnie zamierzałeś zrobić. Jeśli nie, może być konieczne kontynuowanie powtarzania tych kroków, dopóki nie będzie to działać.

Uwaga: Jeśli do instancji A został przypisany Elastyczny adres IP zatrzymałeś go, musisz go ponownie powiązać po ponownym uruchomieniu.

Pamiętaj! Jeśli twoja instancja B została tymczasowo uruchomiona tylko dla tego procesu, nie zapomnij ją zakończyć teraz.
 160
Author: Rodney Quillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-17 05:58:24

Chociaż nie możesz dodać pary kluczy bezpośrednio do uruchomionej instancji EC2, możesz utworzyć użytkownika Linuksa i utworzyć dla niego nową parę kluczy, a następnie użyć jej tak, jak w przypadku pary kluczy oryginalnego użytkownika.

W Twoim przypadku możesz poprosić właściciela instancji (który ją utworzył) o wykonanie następujących czynności. Tak więc właściciel instancji nie musi dzielić się z Tobą własnymi kluczami, ale nadal będziesz mógł używać ssh do tych instancji. Te kroki zostały pierwotnie opublikowane przez Utkarsh Sengar (aka. @zengr) at http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance / . dokonałem tylko kilku drobnych zmian.

  1. Krok 1: Zaloguj się domyślnie użytkownik" ubuntu " :

    $ ssh -i my_orig_key.pem [email protected]
    
  2. Krok 2: Utwórz nowego użytkownika, nazwiemy naszego nowego użytkownika "john":

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

    Ustaw hasło dla "john" przez:

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

    Dodaj "john" do listy sudoera przez:

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

    .. i dodaj następujące do końca z pliku:

    john   ALL = (ALL)    ALL
    

    W porządku! Mamy naszego nowego użytkownika utworzony, teraz trzeba wygenerować plik klucza, który będzie potrzebny do zalogowania, jak my_orin_key.pem w Kroku 1.

    Teraz wyjdź i wróć do ubuntu, z roota.

    [root@ip-11-111-111-111 ubuntu]$ exit
    [ubuntu@ip-11-111-111-111 ~]$
    
  3. Krok 3: tworzenie kluczy publicznych i prywatnych :

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

    Wprowadź hasło utworzone dla "john" w Kroku 2. Następnie utwórz parę kluczy. Pamiętaj, że hasło dla pary kluczy powinno wynosić co najmniej 4 postaci.

    [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
    

    W powyższym kroku, john jest użytkownikiem, który stworzyliśmy, a ubuntu jest domyślną grupą użytkowników.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Krok 4: Teraz wystarczy pobrać klucz o nazwie "john" . Używam scp do pobierania / przesyłania plików z EC2, oto jak możesz to zrobić.

    Nadal będziesz musiał skopiować plik używając Ubuntu user, ponieważ masz tylko klucz do tej nazwy użytkownika. Musisz więc przenieść klucz do folderu ubuntu i chmod go do 777.

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

    A teraz przyjdź do terminala lokalnej maszyny, gdzie masz my_orig_key.plik pem i zrób to:

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

    Powyższe polecenie skopiuje klucz "john" do bieżącego katalogu roboczego na twojej lokalnej maszynie. Po skopiowaniu klucza na lokalny komputer, powinieneś usunąć "/home / ubuntu / john", ponieważ jest to klucz prywatny.

    Teraz jedna lokalna maszyna chmod john do 600.
    $ chmod 600 john
    
  5. Krok 5: czas przetestować swój klucz :

    $ ssh -i john [email protected]
    

W ten sposób możesz skonfigurować wielu użytkowników, aby używali jednej instancji EC2!!

 85
Author: Eye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:02

Na lokalnym komputerze uruchom polecenie:

ssh-keygen -t rsa -C "SomeAlias"

Po uruchomieniu tego polecenia Plik kończy się na *.pub zostanie wygenerowany. Skopiuj zawartość tego pliku.

Na Amazon machine, edytuj ~/.ssh / authorized_keys i wklej zawartość*.plik pub (i najpierw usuń istniejącą zawartość).

Możesz następnie SSH użyć innego pliku wygenerowanego z polecenia ssh-keygen (klucz prywatny).

 10
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-10 03:03:31

Zdarzyło mi się to wcześniej (nie miałem dostępu do instancji EC2 stworzonej przez kogoś innego, ale miałem dostęp do AWS web console) i napisałem na blogu odpowiedź: http://readystate4.com/2013/04/09/aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to/

Zasadniczo, możesz odłączyć dysk EBS, podłączyć go do EC2, do którego masz dostęp. Dodaj swój klucz SSH pub do ~ec2-user/.ssh/authorized_keys Na dołączonym dysku. Następnie umieść go z powrotem na starej instancji EC2. krok po kroku w linku za pomocą Amazon AMI.

Nie ma potrzeby tworzenia migawek ani tworzenia nowej sklonowanej instancji.

 7
Author: Mauvis Ledford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 21:44:46

Możesz po prostu dodać nowy klucz do instancji za pomocą następującego polecenia:

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

Możesz skonfigurować domain_alias w~/.SSH config

host domain_alias
  User ubuntu
  Hostname domain.com
  IdentityFile ~/.ssh/ec2.pem
 4
Author: karser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-09 17:16:22

W moim przypadku użyłem tej dokumentacji, aby powiązać parę kluczy z moją instancją Elastic Beanstalk

Ważne

Musisz utworzyć parę kluczy Amazon EC2 i skonfigurować Elastic Beanstalk–aprowizowane instancje Amazon EC2, aby używały pary kluczy Amazon EC2, zanim będziesz mógł uzyskać dostęp do Elastic Beanstalk-aprowizowane instancje Amazon EC2. Możesz skonfigurować pary kluczy Amazon EC2 za pomocą konsoli zarządzania AWS. Instrukcje dotyczące tworzenia pary kluczy dla Amazon EC2, zobacz Przewodnik Amazon Elastic Compute Cloud Getting Started.

Konfigurowanie instancji serwera Amazon EC2 za pomocą Elastic Beanstalk

 4
Author: Kamal Essajidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-21 20:58:07

Nie znalazłem łatwego sposobu na dodanie nowej pary kluczy przez konsolę, ale można to zrobić ręcznie.

Wystarczy ssh do skrzynki EC2 za pomocą istniejącej pary kluczy. Następnie Edytuj~/.ssh / authorized_keys i dodać nowy klucz do nowej linii. Exit i ssh przez nową maszynę. Sukces!

 3
Author: ninja123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-28 14:05:16

Po uruchomieniu instancji nie ma możliwości zmiany klawiatura powiązana z instancją na poziomie metadanych, ale TY możliwość zmiany klucza ssh używanego do połączenia z instancją .

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

 2
Author: YetAnotherMatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:11