Jak pobrać klucz publiczny z Amazon AWS?

25

Mam działającą instancję amazonu ec2 Linux powiązaną z parą kluczy (p1) i pobrałem klucz prywatny na pulpit główny. Teraz w pracy utworzyłem parę kluczy (p2) na pulpicie roboczym i zaimportowałem klucz publiczny do Amazon za pomocą konsoli AWS.

W domu chcę dodać klucz publiczny pary kluczy p2, który ma zostać dodany do authorized_keysmojej instancji AMI (do której mogę obecnie uzyskać dostęp tylko z domu). Jednak zapomniałem zabrać ze sobą klucza publicznego p2, więc czy mogę w jakiś sposób wyeksportować ten klucz publiczny z Amazon.

Jus12
źródło

Odpowiedzi:

6

Ładne puzzle, dzięki! Oto jedna odpowiedź:

  1. Uruchom nową, tymczasową instancję A rozruchu EBS t1.micro A, określając parę kluczy p2. Określ strefę dostępności, w której działa już inna instancja B i do której masz dostęp. (W razie potrzeby uruchom tymczasowy).

  2. Zatrzymaj (nie zakończ) instancję A po kilku minutach jej działania, aby miała szansę zapisać klucz publiczny w pliku autoryzowanych_kluczy.

  3. Odłącz główny wolumin EBS od zatrzymanej instancji A. Dołącz i podłącz go do działającej instancji B.

  4. Skopiuj klucz publiczny z zamontowanego systemu plików.

  5. Odłącz i usuń wolumin EBS. Zakończ tymczasową instancję A.

Eric Hammond
źródło
1
Nie jestem pewien, jak to faktycznie rozwiązuje pierwotne pytanie ... jest to zdecydowanie jeden ze sposobów radzenia sobie z instancjami AWS EC2, jeśli tylko używasz instancji wspieranych przez EBS.
Jeremy Bouse,
Nie musisz używać instancji rozruchowych EBS, z wyjątkiem jednorazowego uruchomienia instancji tymczasowej, aby uzyskać z niej klucz publiczny. Wszystko, co chcesz zrobić, to zdobyć klucz publiczny, który robi to podejście.
Eric Hammond,
1
Jeśli masz klucz prywatny, możesz ponownie wygenerować klucz publiczny bez przeprowadzania takich środków.
Jeremy Bouse,
2
Jeremy: Na podstawie pierwotnego pytania klucz prywatny powrócił do swojego biura, gdzie nie mógł go zdobyć. A kiedy wróci do biura, nie będzie mógł wejść do instancji EC2, ponieważ nie ma klucza publicznego dla tego prywatnego klucza biurowego. Dlatego chce uzyskać klucz publiczny od Amazon, a jedynym sposobem na to jest uruchomienie instancji z tym kluczem publicznym. Następnie musisz usunąć klucz publiczny z tego wystąpienia, co jest trudną częścią.
Eric Hammond,
1
łał! dużo pracy, aby uzyskać klucz publiczny. Amazonowi łatwiej byłoby umieścić opcję „Eksportuj klucz publiczny”.
Jus12
37

Prawidłowe polecenie ssh-keygen to jednak:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
rsmoorthy
źródło
Powinien to być komentarz lub proponowana edycja poprzedniej odpowiedzi. Masz jednak rację.
JCotton
Masz rację, to powinien być komentarz. Niestety nie uzyskałem jeszcze uprawnień do komentowania :-(
rsmoorthy 13.01.12
haha, cóż, proszę bardzo. Dzięki za wprowadzenie korekty.
JCotton
Ta odpowiedź zadziałałaby, gdyby miał dostęp do klucza prywatnego, ale w pierwotnym pytaniu klucz prywatny znajduje się w innym miejscu i jest niedostępny.
Eric Hammond,
1
uruchom, chmod 400 your_private_key.pemjeśli
pojawi się
7

Podałem już jedną odpowiedź, która korzysta z woluminów EBS, aby uzyskać dostęp do klucza publicznego ssh, ale oto inny sposób, aby uzyskać do niego dostęp, uruchamiając tymczasową instancję EC2 za pomocą skryptu danych użytkownika, który wysyła klucz publiczny do wyjścia konsoli. Oto kroki:

Zapisz następujący kod w pliku o nazwie output-ssh-key.userdatana komputerze lokalnym. NIE URUCHAMIAJ TEGO POLECENIA LOKALNIE!

#!/bin/bash -ex
exec> >(tee /var/log/user-data.log|logger -t user -s 2>/dev/console) 2>&1
adminkey=$(GET instance-data/latest/meta-data/public-keys/ | 
  perl -ne 'print $1 if /^0=[^a-z0-9]*([-.@\w]*)/i')
cat <<EOF
SSHKEY:========================================================================
SSHKEY:HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "$adminkey":
SSHKEY:$(cat /home/ubuntu/.ssh/authorized_keys)
SSHKEY:========================================================================
SSHKEY:Halting in 50min ($(date --date='+50 minutes' +"%Y-%m-%d %H:%M UTC"))
EOF
sleep 3000
halt

Uruchom zwykłą instancję Ubuntu 10.04 LTS z powyższym plikiem jako skrypt danych użytkownika. Podaj parę kluczy, dla której chcesz odzyskać publiczny klucz ssh:

ec2-run-instances \
  --key YOURKEYPAIRHERE \
  --instance-type t1.micro \
  --instance-initiated-shutdown-behavior terminate \
  --user-data-file output-ssh-key.userdata \
  ami-ab36fbc2

Żądaj wyjścia konsoli od instancji, dopóki nie wyświetli się twój publiczny klucz ssh. Podaj identyfikator instancji zwrócony z komendy run-instances:

ec2-get-console-output YOURINSTANCEID | grep SSHKEY: | cut -f3- -d:

W ciągu 2-10 minut otrzymasz taki wynik:

========================================================================
HERE IS YOUR PUBLIC SSH KEY FOR KEYPAIR "erich":
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6rn8cl41CkzaH4ZBhczOJZaR4xBBDI1Kelc2ivzVvCB
THcdJRWpDd5I5hY5W9qke9Tm4fH3KaUVndlcP0ORGvS3PAL4lTpkS4D4goMEFrwMO8BG0NoE8sf2U/7g
aUkdcrDC7jzKYdwleRCI3uibNXiSdeG6RotClAAp7pMflDVp5WjjECDZ+8Jzs2wasdTwQYPhiWSiNcfb
fS97QdtROf0AcoPWElZAgmabaDFBlvvzcqxQRjNp/zbpkFHZBSKp+Sm4+WsRuLu6TDe9lb2Ps0xvBp1F
THlJRUVKP2yeZbVioKnOsXcjLfoJ9TEL7EMnPYinBMIE3kAYw3FzZZFeX3Q== erich
========================================================================
Halting in 50min (2011-12-20 05:58 UTC)

Tymczasowa instancja zakończy się automatycznie w ciągu niecałej godziny, ale możesz ją rozwiązać samodzielnie, jeśli chcesz mieć pewność, że nie obciążą Cię więcej niż dwa centy, których uruchomienie będzie kosztować.

Eric Hammond
źródło
Próbowałem tego z nowoczesną instalacją awscli i działało to z twoim skryptem danych użytkownika. Musiałem jednak nieco dostosować polecenia. To zadziałało dla regionu eu-west-1: aws ec2 run-instances - key-name mykey --instance-type t1.micro --instance-initial--shutdown-zachowate terminate - user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output - id-instancji i-0ce56c0e02086160d; aws ec2 terminate-instances - id-instancji i-0ce56c0e02086160d
holmb
(Edytowane) Ok formatowanie jest tutaj okropne, opublikuję jako inną odpowiedź.
Bernhard
5

Jeśli masz prywatny klucz SSH, możesz ponownie wygenerować składnik klucza publicznego, po prostu uruchamiając następującą komendę ssh-keygen :

 ssh-keygen -i -f /path/to/private-key > /path/to/public-key

Tyle jest prosta część ... Konsola AWS i API nie obsługują wypychania 2 par kluczy podczas uruchamiania instancji EC2. Jest to ćwiczenie, które administrator systemu może wykonać w inny sposób.

Jeśli masz dostęp do klucza tożsamości, który został już autoryzowany, możesz po prostu wykonać następującą komendę ssh-copy-id :

 ssh-copy-id -i /path/to/public-key user@EC2-instance

Spowoduje to automatyczne skopiowanie danego klucza publicznego na serwer i do ~user/.ssh/authorized_keyspliku oraz zapewnienie odpowiednich uprawnień do pliku.

Bardziej eleganckim sposobem byłoby włączenie dodatkowych kluczy tożsamości do procesów zarządzania konfiguracją. W moim przypadku pociąga to za sobą dodanie dodatkowych kluczy do konfiguracji Puppet dla węzła.

Na marginesie, osobiste preferencje, ale korzystałyby z lepszej metody zarządzania kluczami SSH niż zwykłe dołączanie oddzielnych kluczy do pracy i lokalizacji domu. Jak wspomniałem w poprzednim pytaniu , przechowuję klucze na dysku USB, który trzymam przy sobie, a nie na dowolnym komputerze, którego używam.

Jeremy Bouse
źródło
0

Inną opcją byłoby dodanie krótkiego skryptu w danych_użytkownika, który po prostu dodaje kolejny klucz ssh do roota:

#!/bin/bash

touch ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys

echo "<KEY>" >> ~/.ssh/authorized_keys

Następnie możesz zalogować się do komputera jako root ssh -l root -i <KEYFILE> URLi po prostu odczytać klucz z uprawnionych kluczy użytkownika ec2_user, ubuntu lub jak to się nazywa.

Jedyna rzecz - musisz udostępnić maszynę publicznie i upewnić się, że dostęp do portu 22 jest możliwy z zewnątrz.

Bernhard
źródło