Як завантажити відкритий ключ з Amazon AWS?


25

У мене працює запущений екземпляр Linux Linux Amazon ec2, пов'язаний з клавіатурою (p1), і я завантажив приватний ключ на домашній робочий стіл. Зараз на роботі я створив ключ (p2) на своєму робочому столі та імпортував відкритий ключ до Amazon через консоль AWS.

Вдома я хочу додати відкритий ключ keypair p2 до authorized_keysмого екземпляру AMI (до якого я зараз можу отримати доступ лише з дому). Однак я забув взяти з собою відкритий ключ p2, тож чи можна якось експортувати цей відкритий ключ з Amazon.

Відповіді:


6

Гарна головоломка, дякую! Ось одна відповідь:

  1. Запустіть новий, тимчасовий завантажувач EBS t1.micro екземпляр A із зазначенням клавіші p2. Вкажіть зону доступності, де вже працює інший екземпляр B і до якого у вас є доступ. (Запустіть тимчасовий, якщо потрібно).

  2. Зупиніть (не припиняйте) екземпляр A після того, як він перебуває у запущеному стані протягом декількох хвилин, тому у нього є шанс зберегти відкритий ключ у файл дозволеного_кейса.

  3. Від'єднайте кореневий об'єм EBS від зупиненого екземпляра A. Приєднайте та встановіть його до запущеного екземпляра B.

  4. Скопіюйте відкритий ключ із змонтованої файлової системи.

  5. Від'єднайте та видаліть том EBS. Скасувати тимчасову інстанцію А.


1
Не впевнений, як це насправді вирішує оригінальне питання ... це, безумовно, один із способів вирішити випадки AWS EC2, якщо і лише якщо ви використовуєте підтримувані EBS екземпляри.
Джеремі Бууз

Вам не доведеться використовувати екземпляри завантаження EBS, за винятком одного разу, коли ви запускаєте тимчасовий екземпляр, щоб вилучити з нього відкритий ключ. Все, що ви хочете зробити, це отримати відкритий ключ, який робить цей підхід.
Ерік Хаммонд

1
Якщо у вас є приватний ключ, ви можете відновити відкритий ключ, не застосовуючи таких заходів.
Джеремі Бууз

2
Джеремі: Виходячи з оригінального запитання, приватний ключ повертається в його офіс, де він не може його отримати. І як тільки він повертається до офісу, він не може потрапити в екземпляр EC2, оскільки у нього немає приватного ключа для приватного ключа офісу. Ось чому він хоче отримати відкритий ключ від Amazon, і єдиний спосіб зробити це - запустити екземпляр із цим відкритим ключем. Тоді вам доведеться відключити відкритий ключ цього екземпляра, який є складною частиною.
Ерік Хаммонд

1
Оце Так! багато роботи, щоб отримати відкритий ключ. Амазонці було б простіше поставити опцію "Експорт відкритого ключа".
Jus12

37

Однак правильна команда ssh-keygen:

ssh-keygen -y -f /path/to/privatekey > /path/to/publickey

Це має бути коментар або запропонована редакція попередньої відповіді. Ти прав, правда.
JCotton

Ви праві, це повинен був бути коментарем. На жаль, я ще не заробив привілеїв коментувати :-(
rsmoorthy

ха-ха, ну ви йдете. Дякуємо за привласнення в корекції.
JCotton

Ця відповідь спрацювала б, якби він мав доступ до приватного ключа, але в оригінальному запитанні цей приватний ключ знаходиться в іншому місці та недоступний.
Ерік Хаммонд

1
запустіть, chmod 400 your_private_key.pemякщо ви отримаєте "Дозволи занадто відкриті помилки"
crizCraig

7

Я вже надав одну відповідь, в якій використовуються томи EBS, щоб отримати доступ до відкритого ключа ssh, але ось інший спосіб ви можете отримати це, запустивши тимчасовий екземпляр EC2 із скриптом даних користувача, який надсилає відкритий ключ на консольний вихід. Ось такі кроки:

Збережіть наступний код у файлі, названому output-ssh-key.userdataна вашому локальному комп’ютері. НЕ РУБАЙТЕ ЦІ КОМАНДИ МІСКО!

#!/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

Запустіть екземпляр Ubuntu 10.04 LTS із вказаним вище файлом як сценарій даних про користувача. Вкажіть ключ, для якого потрібно отримати відкритий ключ ssh:

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

Продовжуйте запитувати вихід консолі від екземпляра, поки він не покаже ваш відкритий ключ ssh. Вкажіть ідентифікатор екземпляра, повернутий з команди run-instance:

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

Протягом 2-10 хвилин ви отримаєте такий результат:

========================================================================
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)

Тимчасовий екземпляр автоматично припинить себе протягом години, але ви можете самостійно його скасувати, якщо хочете переконатися, що вам не виставлять більше двох центів, які коштуватимуть.


Я спробував це за допомогою сучасної установки awscli, і це працювало з вашим сценарієм даних про користувача. Однак мені довелося трохи адаптувати команди. Це працювало для регіону eu-west-1: aws ec2 run-instance --key-name mykey - тип речовини t1.micro - ініційована речовина-завершення поведінки завершується --user-data file: // output- ssh-key.userdata --image-id ami-c1167eb8; aws ec2 get-console-output - вещество-id i-0ce56c0e02086160d; aws ec2 закінчувати-інстанції - substance-id i-0ce56c0e02086160d
holmb

(Відредаговано) Добре форматування тут жахливе, я буду публікувати як іншу відповідь.
Бернхард

5

Якщо у вас є приватний ключ SSH, ви можете повторно генерувати компонент відкритого ключа, просто виконавши таку команду ssh-keygen :

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

Стільки простої частини ... Консоль AWS та API не підтримують натискання 2 клавіш при запуску екземпляра EC2. Це вправа, яку системний адміністратор може зробити за допомогою інших засобів.

Якщо у вас є доступ до вже посвідченого ідентифікаційного ключа, ви можете просто виконати таку команду ssh-copy-id :

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

Це скопіює даний відкритий ключ на сервер і у ~user/.ssh/authorized_keysфайл автоматично для вас та забезпечить належні дозволи на файл.

Більш елегантним способом було б включення додаткових ключів ідентичності у ваші процеси управління конфігурацією. У моєму випадку це тягне за собою додавання додаткових ключів до конфігурації ляльки для вузла.

В якості додаткового зауваження, особисте уподобання, але використовувало б кращий метод управління ключами SSH, ніж просто включення окремих ключів для роботи та домашнього розташування. Як я вже згадував у попередньому запитанні, я зберігаю свої ключі на USB-накопичувачі, який я тримаю при собі, а не на будь-якому комп’ютері, який я використовую.


0

Іншим варіантом буде додати короткий скрипт у user_data, який просто додає інший ключ ssh до root:

#!/bin/bash

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

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

Тоді ви можете увійти в машину як root ssh -l root -i <KEYFILE> URLі просто прочитати ключ з санкціонованих_кілів користувача ec2_user, ubuntu або як це викликається.

Єдине - вам потрібно зробити доступ до машини загальнодоступним і переконатися, що доступ до порту 22 можливий ззовні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.