У меня есть работающий экземпляр amazon ec2 linux, связанный с парой ключей (p1), и я загрузил закрытый ключ на свой домашний рабочий стол. Теперь на работе я создал пару ключей (p2) на своем рабочем столе и импортировал открытый ключ в Amazon через консоль AWS.
Дома я хочу добавить открытый ключ keypair p2 для добавления в authorized_keys
моего экземпляра AMI (в настоящее время я могу получить доступ только из дома). Однако я забыл взять с собой открытый ключ p2, поэтому можно ли как-то экспортировать этот открытый ключ из Amazon.
Однако правильная команда ssh-keygen:
ssh-keygen -y -f /path/to/privatekey > /path/to/publickey
Хорошая головоломка, спасибо! Вот один ответ:
Запустите новый временный экземпляр A загрузки t1.micro EBS, указав пару ключей p2. Укажите зону доступности, в которой у вас уже запущен другой экземпляр B и к которому у вас есть доступ. (При необходимости запустите временный).
Остановить (не завершать) экземпляр A после того, как он был в рабочем состоянии в течение нескольких минут, чтобы у него была возможность сохранить открытый ключ в свой файл authorized_keys.
Отсоедините корневой том EBS от остановленного экземпляра A. Присоедините и подключите его к работающему экземпляру B.
Скопируйте открытый ключ из смонтированной файловой системы.
Отсоедините и удалите том EBS. Завершите временный экземпляр A.
Я уже предоставил один ответ, в котором используются тома 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)
Временный экземпляр автоматически завершит работу менее чем через час, но вы можете завершить его самостоятельно, если хотите, чтобы с вас не взимали больше двух центов, за запуск которых он будет стоить.
Если у вас есть закрытый SSH-ключ, вы можете повторно сгенерировать компонент открытого ключа, просто выполнив следующие ssh-keygen команда:
ssh-keygen -i -f /path/to/private-key > /path/to/public-key
Это самая простая часть ... Консоль AWS и API не поддерживают нажатие двух пар клавиш при запуске экземпляра EC2. Это упражнение, которое системный администратор должен выполнить другими способами.
Если у вас есть доступ к уже авторизованному ключу идентификации, вы можете просто выполнить следующее ssh-copy-id команда:
ssh-copy-id -i /path/to/public-key user@EC2-instance
Это скопирует данный открытый ключ на сервер и в ~user/.ssh/authorized_keys
файл автоматически для вас и убедитесь, что для этого файла необходимы соответствующие разрешения.
Более элегантным способом было бы включение дополнительных ключей идентификации в процессы управления конфигурацией. В моем случае это влечет за собой добавление дополнительных ключей в Кукольный конфигурация узла.
В качестве примечания, личные предпочтения, но будут использовать лучший метод управления ключами 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
и просто считайте ключ из authorized_keys пользователя ec2_user, ubuntu или как он там называется.
Единственное - вам нужно сделать машину общедоступной и убедиться, что доступ к порту 22 возможен извне.