Добавить пару ключей в существующий экземпляр EC2
Мне был предоставлен доступ к консоли AWS к учетной записи с двумя запущенными экземплярами, которую я не могу закрыть (в работе). Однако я хотел бы получить SSH-доступ к этим экземплярам, возможно ли создать новую пару ключей и применить ее к экземплярам, чтобы я мог использовать SSH? Получить существующий файл pem для пары ключей, в которой были созданы экземпляры, в настоящее время не вариант.
Если это невозможно, есть ли другой способ, которым я могу попасть в инстансы?
11 ответов
Вы не можете применить пару ключей к работающему экземпляру. Вы можете использовать только новую пару ключей для запуска нового экземпляра.
Для восстановления, если это загрузочный AMI EBS, вы можете остановить его, сделать снимок тома. Создайте новый том на его основе. И сможете использовать его обратно, чтобы запустить старый экземпляр, создать новый образ или восстановить данные.
Хотя данные при временном хранении будут потеряны.
Из-за популярности этого вопроса и ответа я хотел получить информацию в ссылке, которую Родни разместил в своем комментарии.
Кредит идет к Эрику Хэммонду за эту информацию.
Исправление файлов в корневом томе EBS экземпляра EC2
Вы можете просматривать и редактировать файлы на корневом томе EBS в экземпляре EC2, даже если вы находитесь в такой катастрофической ситуации, как:
- Вы потеряли ключ ssh или забыли пароль
- Вы допустили ошибку при редактировании файла / etc / sudoers и больше не можете получить root-доступ с помощью sudo, чтобы исправить это
- Ваш долго работающий экземпляр по какой-то причине зависает, с ним невозможно связаться, и он не загружается должным образом
- Вам нужно восстановить файлы с экземпляра, но вы не можете получить к нему доступ
На физическом компьютере, сидящем за вашим столом, вы можете просто загрузить систему с компакт-диска или USB-накопителя, смонтировать жесткий диск, проверить и исправить файлы, а затем перезагрузить компьютер, чтобы вернуться к работе.
Однако удаленный экземпляр EC2 кажется удаленным и недоступным, когда вы находитесь в одной из этих ситуаций. К счастью, AWS предоставляет нам мощь и гибкость для возможности восстановления системы, подобной этой, при условии, что мы запускаем загрузочные экземпляры EBS, а не хранилище экземпляров.
Подход в EC2 несколько похож на физическое решение, но мы собираемся переместить и смонтировать неисправный "жесткий диск" (корневой том EBS) в другой экземпляр, исправить его, а затем переместить обратно.
В некоторых ситуациях может быть проще запустить новый экземпляр EC2 и выбросить плохой, но если вы действительно хотите исправить свои файлы, вот подход, который работал для многих:
Настроить
Укажите исходный экземпляр (A) и том, содержащий поврежденный том EBS, с файлами, которые вы хотите просмотреть и отредактировать.
instance_a=i-XXXXXXXX
volume=$(ec2-describe-instances $instance_a |
egrep '^BLOCKDEVICE./dev/sda1' | cut -f3)
Определите второй экземпляр EC2 (B), который вы будете использовать для исправления файлов на исходном томе EBS. Этот экземпляр должен работать в той же зоне доступности, что и экземпляр A, чтобы к нему можно было подключить том EBS. Если у вас еще не запущен экземпляр, запустите временный.
instance_b=i-YYYYYYYY
Остановите сломанный экземпляр A (ожидая, пока он полностью остановится), отсоедините корневой том EBS от экземпляра (ожидая его отсоединения), затем подключите том к экземпляру B на неиспользуемом устройстве.
ec2-stop-instances $instance_a
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_b --device /dev/sdj $volume
ssh к экземпляру B и смонтируйте том, чтобы вы могли получить доступ к его файловой системе.
ssh ...instance b...
sudo mkdir -p 000 /vol-a
sudo mount /dev/sdj /vol-a
Почини это
На этом этапе вся корневая файловая система из экземпляра A доступна для просмотра и редактирования в /vol-a на экземпляре B. Например, вы можете:
- Поместите правильные ключи ssh в /vol-a/home/ubuntu/.ssh/authorized_keys
- Отредактируйте и исправьте /vol-a/etc/sudoers
- Найдите сообщения об ошибках в /vol-a/var/log/syslog
- Скопируйте важные файлы из /vol-a/…
Примечание. Идентификаторы в этих двух экземплярах могут не совпадать, поэтому будьте осторожны, если вы создаете, редактируете или копируете файлы, принадлежащие пользователям без полномочий root. Например, ваш пользователь mysql в экземпляре A может иметь тот же UID, что и пользователь postfix в экземпляре B, что может вызвать проблемы, если вы укажете файлы с одним именем, а затем переместите том обратно на A.
Заворачивать
Когда вы закончите и будете довольны файлами в /vol-a, размонтируйте файловую систему (все еще в экземпляре-B):
sudo umount /vol-a
sudo rmdir /vol-a
Теперь вернитесь в свою систему с помощью ec2-api-tools, продолжайте перемещать том EBS обратно в его исходный экземпляр A и запустите его снова:
ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a
Надеемся, что вы исправили проблему, экземпляр A работает нормально, и вы можете выполнить то, что вы изначально намеревались сделать. Если нет, возможно, вам придется продолжать повторять эти шаги, пока он не заработает.
Примечание. Если у вас был Elastic IP-адрес, назначенный экземпляру A, когда вы остановили его, вам нужно будет повторно связать его после повторного запуска.
Помните! Если ваш экземпляр B был временно запущен только для этого процесса, не забудьте прекратить его сейчас.
Хотя вы не можете добавить пару ключей непосредственно к работающему экземпляру EC2, вы можете создать пользователя linux и создать для него новую пару ключей, а затем использовать его, как если бы вы использовали исходную пару ключей пользователя.
В вашем случае вы можете попросить владельца экземпляра (который его создал) сделать следующее. Таким образом, владелец экземпляра не должен делиться с вами своими собственными ключами, но вы все равно сможете использовать ssh в этих экземплярах. Эти шаги были первоначально опубликованы zengr (aka. zengr) по адресу http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/. Я сделал только несколько небольших изменений.
Шаг 1: войдите в систему по умолчанию для пользователя "Ubuntu":
$ ssh -i my_orig_key.pem ubuntu@111.111.11.111
Шаг 2: создайте нового пользователя, мы назовем нашего нового пользователя "Джон":
[ubuntu@ip-11-111-111-111 ~]$ sudo adduser john
Установите пароль для "john":
[ubuntu@ip-11-111-111-111 ~]$ sudo su - [root@ip-11-111-111-111 ubuntu]$ passwd john
Добавить "Джон" в список sudoer с помощью:
[root@ip-11-111-111-111 ubuntu]$ visudo
.. и добавьте следующее в конец файла:
john ALL = (ALL) ALL
Хорошо! Мы создали нашего нового пользователя, теперь вам нужно сгенерировать файл ключа, который понадобится для входа в систему, как у нас в my_orin_key.pem на шаге 1.
Теперь выйдите и вернитесь в Ubuntu из-под рута.
[root@ip-11-111-111-111 ubuntu]$ exit [ubuntu@ip-11-111-111-111 ~]$
Шаг 3: создание открытого и закрытого ключей:
[ubuntu@ip-11-111-111-111 ~]$ su john
Введите пароль, который вы создали для "john" на шаге 2. Затем создайте пару ключей. Помните, что пароль для пары ключей должен содержать не менее 4 символов.
[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
На предыдущем шаге john - это созданный нами пользователь, а ubuntu - группа пользователей по умолчанию.
[john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
Шаг 4: теперь вам просто нужно скачать ключ "Джон". Я использую scp для загрузки / выгрузки файлов из EC2, вот как вы можете это сделать.
Вам все равно нужно будет скопировать файл, используя пользователя Ubuntu, так как у вас есть только ключ для этого имени пользователя. Итак, вам нужно переместить ключ в папку Ubuntu и перейти на 777.
[john@ip-11-111-111-111 ~]$ sudo cp john /home/ubuntu/ [john@ip-11-111-111-111 ~]$ sudo chmod 777 /home/ubuntu/john
Теперь зайдите в терминал локальной машины, где у вас есть файл my_orig_key.pem, и сделайте так:
$ cd ~/.ssh $ scp -i my_orig_key.pem ubuntu@111.111.11.111:/home/ubuntu/john john
Приведенная выше команда скопирует ключ "john" в текущий рабочий каталог на вашем локальном компьютере. После того, как вы скопировали ключ на локальный компьютер, вы должны удалить "/home/ubuntu/john", так как это закрытый ключ.
Теперь одна ваша локальная машина chmod john до 600.
$ chmod 600 john
Шаг 5: время проверить ваш ключ:
$ ssh -i john john@111.111.11.111
Таким образом, вы можете настроить несколько пользователей для использования одного экземпляра EC2!
Для сред Elasticbeanstalk вы можете применить пару ключ-значение к работающему экземпляру следующим образом:
- Создайте пару ключ-значение из EC2 -> Key Pairs (на вкладке NETWORK & SECURITY)
- Перейдите в Elasticbeanstalk и щелкните свое приложение.
- Перейдите на страницу конфигурации и измените настройки безопасности
- Выберите пару ключей EC2 и нажмите Применить.
- Нажмите "Подтвердить", чтобы подтвердить обновление. Он завершит работу среды и применит значение ключа к вашей среде.
На вашем локальном компьютере выполните команду:
ssh-keygen -t rsa -C "SomeAlias"
После выполнения этой команды будет создан файл, оканчивающийся на *.pub. Скопируйте содержимое этого файла.
На машине Amazon отредактируйте ~/.ssh/authorized_keys и вставьте содержимое файла *.pub (и сначала удалите любое существующее содержимое).
Затем вы можете использовать SSH, используя другой файл, созданный с помощью команды ssh-keygen (закрытый ключ).
Я не нашел простой способ добавить новую пару ключей через консоль, но вы можете сделать это вручную.
Просто вставьте ssh в вашу коробку EC2 с существующей парой ключей. Затем отредактируйте ~/.ssh/authorized_keys и добавьте новый ключ в новой строке. Выход и ssh через новую машину. Успех!
Это случилось со мной ранее (у меня не было доступа к экземпляру EC2, который кто-то создал, но у него был доступ к веб-консоли AWS), и я опубликовал ответ в блоге: http://readystate4.com/2013/04/09/aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to/, что вы потеряли доступ к /
По сути, вы можете отсоединить диск EBS, подключить его к EC2, к которому у вас есть доступ. Добавьте ключ SSH для публикации в ~ec2-user/.ssh/authorized_keys
на этом прикрепленном диске. Затем верните его на старый экземпляр EC2. пошагово в ссылке с помощью Amazon AMI.
Нет необходимости делать снимки или создавать новый клонированный экземпляр.
В моем случае я использовал эту документацию, чтобы связать пару ключей с моим экземпляром Elastic Beanstalk
Важный
Вы должны создать пару ключей Amazon EC2 и настроить свои экземпляры Amazon EC2, предоставляемые Elastic Beanstalk, для использования пары ключей Amazon EC2, прежде чем вы сможете получить доступ к экземплярам Amazon EC2, предоставляемым Elastic Beanstalk. Вы можете настроить пары ключей Amazon EC2 с помощью Консоли управления AWS. Инструкции по созданию пары ключей для Amazon EC2 см. В руководстве по началу работы с Amazon Elastic Compute Cloud.
Настройка экземпляров сервера Amazon EC2 с помощью Elastic Beanstalk
Вы можете просто добавить новый ключ к экземпляру с помощью следующей команды:
ssh-copy-id -i ~/.ssh/id_rsa.pub domain_alias
Вы можете настроить domain_alias в ~/.ssh config
host domain_alias
User ubuntu
Hostname domain.com
IdentityFile ~/.ssh/ec2.pem
После запуска экземпляра невозможно изменить пару ключей, связанную с экземпляром, на уровне метаданных, но вы можете изменить ключ ssh, используемый для подключения к экземпляру.
/questions/5435282/izmenit-paru-klyuchej-dlya-ekzemplyara-ec2
Фактически вы можете добавить пару ключей через страницу конфигурации эластичного бобового стебля. Затем он перезапускает ваш экземпляр, и все работает.
Теперь можно временно получить доступ к работающему экземпляру с помощью любого SSH-ключа, которым вы управляете, даже не добавляя его в качестве пары ключей в EC2, используя EC2 Instance Connect. Он поддерживается только в некоторых дистрибутивах Linux и AMI, но если вы используете относительно недавнюю версию Amazon Linux 2 или Ubuntu, он должен быть установлен и запущен по умолчанию.
Существует два основных способа использования EC2 Instance Connect:
- В консоли AWS вы можете выбрать сведения об экземпляре в EC2 и нажать кнопку «Подключиться» в правом верхнем углу, а затем использовать вкладку «Подключение экземпляра EC2» (в настоящее время используется по умолчанию).
- Из интерфейса командной строки AWS вы сначала передаете свой ключ экземпляру с помощью
затем подключитесь по SSH, как обычно.
Обратите внимание, что это лишь временное разрешение, ваш SSH-ключ перестанет быть разрешен через короткий период времени, хотя после входа вы не будете отключены. Это также не изменяет файл, поэтому не ожидайте увидеть там новую строку. Если вы хотите навсегда разрешить свой ключ SSH, как только вы войдете через EC2 Instance Connect, вручную отредактируйте
Чтобы использовать это, вам необходимо иметь доступ к своему экземпляру по сети, и он должен разрешить SSH-соединения (настроить группы безопасности и т. д.). Вы можете запустить команду AWS CLI из другого места, чем то место, где вы на самом деле используете SSH, поэтому, например, вы можете использовать другой экземпляр EC2 в том же VPC для доступа к вашему в настоящее время недоступному экземпляру EC2.
Только для консольной версии экземпляр должен иметь:
- общедоступный IPv4-адрес и
- правило группы безопасности, которое разрешает TCP-порту 22 доступ из диапазона IP-адресов службы EC2 Instance Connect для своего региона.
Диапазон IP-адресов сервиса можно получить из полного списка диапазонов IP-адресов AWS . Некоторые завитки и jq могут быстро получить правильный диапазон (замените
curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | \
jq '.prefixes[] | select(.region == "us-west-1" and .service=="EC2_INSTANCE_CONNECT")'
вывод будет выглядеть примерно так:
{
"ip_prefix": "13.52.6.112/29",
"region": "us-west-1",
"service": "EC2_INSTANCE_CONNECT",
"network_border_group": "us-west-1"
}
Значение