Как скачать открытый ключ из Amazon AWS?

У меня запущен экземпляр amazon ec2 linux, связанный с парой ключей (p1), и я загрузил закрытый ключ на свой домашний рабочий стол. Сейчас на работе я создал пару ключей (p2) на рабочем столе и импортировал открытый ключ в Amazon через консоль AWS.

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

5 ответов

Решение

Хорошая головоломка, спасибо! Вот один ответ:

  1. Запустите новый временный экземпляр EBS boot t1.micro A, указав пару ключей p2. Укажите зону доступности, где у вас уже есть другой экземпляр B, к которому у вас есть доступ. (Запустите временный, если необходимо).

  2. Остановите (не завершите) экземпляр A после того, как он находился в рабочем состоянии в течение нескольких минут, чтобы у него была возможность сохранить открытый ключ в своем файле author_keys.

  3. Отсоедините корневой том EBS от остановленного экземпляра A. Подключите и подключите его к работающему экземпляру B.

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

  5. Отсоедините и удалите том EBS. Завершить временный экземпляр А.

Правильная команда ssh-keygen однако:

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

Я уже предоставил один ответ, который использует тома 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-instances:

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)

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

Если у вас есть закрытый ключ SSH, вы можете заново сгенерировать компонент открытого ключа, просто выполнив следующую команду ssh-keygen:

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

Это простая часть... Консоль и API AWS не поддерживают нажатие двух пар ключей при запуске экземпляра EC2. Это упражнение, оставленное системному администратору для выполнения другими способами.

Если у вас есть доступ к авторизованному ключу идентификации, вы можете просто выполнить следующую команду ssh-copy-id:

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

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

Более элегантный способ - включить дополнительные идентификационные ключи в процессы управления конфигурацией. В моем случае это влечет за собой добавление дополнительных ключей к конфигурации Puppet для узла.

Как примечание, личные предпочтения, но будут использовать лучший метод управления ключами SSH, чем просто включать отдельные ключи для работы и дома. Как я уже упоминал в предыдущем вопросе, мои ключи хранятся на USB-накопителе, а не на любом используемом мной компьютере.

Другой вариант - добавить в 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 возможен снаружи.

Другие вопросы по тегам