Добавить Keypair в существующий экземпляр EC2

Мне предоставили доступ к Консоли AWS для учетной записи с двумя экземплярами, которые я не могу отключить (в процессе производства). Тем не менее, я хотел бы получить доступ SSH к этим экземплярам, ​​возможно ли создать новую Keypair и применить ее к экземплярам, ​​чтобы я мог использовать SSH? Получение существующего файла pem для ключевой пары, в которой были созданы экземпляры, в настоящее время не является вариантом.

Если это невозможно, есть ли другой способ, который я могу получить в экземплярах?

Ответ 1

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

Для восстановления, если это AMI загрузочный AMI, вы можете остановить его, сделать снимок тома. Создайте новый том на основе этого. И сможете использовать его для запуска старого экземпляра, создания нового изображения или восстановления данных.

Хотя данные в эфемерном хранилище будут потеряны.


Из-за популярности этого вопроса и ответа я хотел зафиксировать информацию в ссылке, которую Родни опубликовал в своем комментарии.

Кредит переходит на Эрик Хаммонд для эту информацию.

Фиксация файлов на корневом EBS-диске экземпляра EC2

Вы можете просматривать и редактировать файлы на корневом EBS-томе на экземпляре EC2, даже если вы находитесь в том, что считаете катастрофической ситуацией, например:

  • Вы потеряли свой ssh-ключ или забыли свой пароль.
  • Вы сделали ошибку, отредактировав файл /etc/sudoers и больше не можете получить доступ root с помощью sudo, чтобы исправить его.
  • Ваш длинный экземпляр по какой-то причине висит, не может быть связался и не смог нормально загрузиться
  • Вам нужно восстановить файлы с экземпляра, но не можете добраться до него

На физическом компьютере, сидящем за вашим столом, вы можете просто загрузить систему с помощью CD или 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/...

Примечание: uids в двух экземплярах могут быть не идентичными, поэтому будьте осторожны, если вы создаете, редактируете или копируете файлы, принадлежащие пользователям без полномочий root. Например, ваш пользователь mysql в экземпляре A может иметь тот же UID, что и ваш постфиксный пользователь на экземпляре B, который может вызвать проблемы, если вы производите файлы с одним именем, а затем переместите том обратно в A.

Обернуть

После того, как вы закончите, и вы довольны файлами под /vol -a, отключите файловую систему (все еще на экземпляре-B):

sudo umount /vol-a
sudo rmdir /vol-a

Теперь вернемся к вашей системе с помощью ec2-api-инструментов, продолжайте перемещать том EBS обратно в свой дом в исходном экземпляре A и снова запустить экземпляр:

ec2-detach-volume $volume
ec2-attach-volume --instance $instance_a --device /dev/sda1 $volume
ec2-start-instances $instance_a

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

Примечание. Если у вас был Эластичный IP-адрес, назначенный экземпляру A, когда вы его остановили, вам нужно будет повторно связать его после его запуска снова.

Помните! Если ваш экземпляр B был временно запущен именно для этого процесса, не забудьте его закрыть.

Ответ 2

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

В вашем случае вы можете попросить владельца экземпляра (который его создал) сделать следующее. Таким образом, владелец экземпляра не должен делиться с вами своими собственными ключами, но вы все равно сможете использовать ssh в этих экземплярах. Эти шаги были первоначально опубликованы Utkarsh Sengar (aka. @Zengr) по адресу http://utkarshsengar.com/2011/01/manage-multiple-accounts-on-1-amazon-ec2-instance/. Я сделал только несколько небольших изменений.

  1. Шаг 1: войдите в систему по умолчанию "Ubuntu" пользователь:

    $ ssh -i my_orig_key.pem [email protected]
    
  2. Шаг 2: создайте нового пользователя, мы назовем нашего нового пользователя "Джон":

    [[email protected] ~]$ sudo adduser john
    

    Установите пароль для "john" с помощью:

    [[email protected] ~]$ sudo su -
    [[email protected] ubuntu]# passwd john
    

    Добавить "john" в список sudoers по:

    [[email protected] ubuntu]# visudo
    

    .. и добавьте следующее в конец файла:

    john   ALL = (ALL)    ALL
    

    Хорошо! Мы создали нашего нового пользователя, теперь вам нужно сгенерировать файл ключа, который будет необходим для входа в систему, как у нас в my_orin_key.pem на шаге 1.

    Теперь выйдите и вернитесь в Ubuntu из-под рута.

    [[email protected] ubuntu]# exit
    [[email protected] ~]$
    
  3. Шаг 3: создание открытого и закрытого ключей:

    [[email protected] ~]$ su john
    

    Введите пароль, который вы создали для "john" на шаге 2. Затем создайте пару ключей. Помните, что пароль для пары ключей должен содержать не менее 4 символов.

    [[email protected] ubuntu]$ cd /home/john/
    [[email protected] ~]$ ssh-keygen -b 1024 -f john -t dsa
    [[email protected] ~]$ mkdir .ssh
    [[email protected] ~]$ chmod 700 .ssh
    [[email protected] ~]$ cat john.pub > .ssh/authorized_keys
    [[email protected] ~]$ chmod 600 .ssh/authorized_keys
    [[email protected] ~]$ sudo chown john:ubuntu .ssh
    

    На предыдущем этапе john - это созданный нами пользователь, а ubuntu - это группа пользователей по умолчанию.

    [[email protected] ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Шаг 4: теперь вам просто нужно скачать ключ под названием "Джон". Я использую scp для загрузки/выгрузки файлов из EC2, вот как вы можете это сделать.

    Вам все равно нужно будет скопировать файл, используя пользователя Ubuntu, поскольку у вас есть ключ только для этого имени пользователя. Итак, вам нужно переместить ключ в папку Ubuntu и перейти на 777.

    [[email protected] ~]$ sudo cp john /home/ubuntu/
    [[email protected] ~]$ sudo chmod 777 /home/ubuntu/john
    

    Теперь зайдите в терминал локальных машин, где у вас есть файл my_orig_key.pem, и сделайте так:

    $ cd ~/.ssh
    $ scp -i my_orig_key.pem [email protected]:/home/ubuntu/john john
    

    Приведенная выше команда скопирует ключ "john" в текущий рабочий каталог на вашем локальном компьютере. После того, как вы скопировали ключ на свой локальный компьютер, вы должны удалить "/home/ubuntu/john", поскольку он является закрытым ключом.

    Теперь одна ваша локальная машина chmod john до 600.

    $ chmod 600 john
    
  5. Шаг 5: время проверить ваш ключ:

    $ ssh -i john [email protected]
    

Таким образом, вы можете настроить несколько пользователей для использования одного экземпляра EC2!

Ответ 3

На вашем локальном компьютере выполните команду:

ssh-keygen -t rsa -C "SomeAlias"

После запуска этой команды будет создан файл, заканчивающийся на *.pub. Скопируйте содержимое этого файла.

На машине Amazon отредактируйте файлы ~/.ssh/authorized_keys и вставьте содержимое *.pub файла (и сначала удалите все существующее содержимое).

Затем вы можете использовать SSH другой файл, который был сгенерирован командой ssh-keygen (закрытый ключ).

Ответ 4

Это произошло со мной раньше (у меня не было доступа к экземпляру EC2, который был создан кем-то другим, но имел доступ к веб-консоли AWS), и я написал ответ: http://readystate4.com/2013/04/09/aws-gaining-ssh-access-to-an-ec2-instance-you-lost-access-to/

В принципе, вы можете отсоединить диск EBS и подключить его к EC2, к которому у вас есть доступ. Добавьте ключ SSH pub к ~ec2-user/.ssh/authorized_keys на этом подключенном диске. Затем верните его в старый экземпляр EC2. шаг за шагом в ссылке с использованием Amazon AMI.

Не нужно делать снимки или создавать новый клонированный экземпляр.

Ответ 5

В моем случае я использовал эту документацию, чтобы связать пару ключей с моим экземпляром 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

Ответ 6

Вы можете просто добавить новый ключ к экземпляру с помощью следующей команды:

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

Ответ 7

Я не нашел простой способ добавить новую пару ключей через консоль, но вы можете сделать это вручную.

Просто ssh в поле EC2 с существующей парой ключей. Затем отредактируйте ~/.ssh/authorized_keys и добавьте новый ключ в новую строку. Exit и ssh через новую машину. Успех!

Ответ 8

После запуска экземпляра нет способа изменить keypair, связанный с экземпляром на уровне метаданных, но вы может изменить, какой ключ ssh вы используете для подключения к экземпляру.

fooobar.com/info/27619/...