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


240

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

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


Вы пробовали решение здесь: stackoverflow.com/questions/1454629/… ? ssh-addдолжен делать то, что вам нужно.
Марк Боллинджер

Приятно изучить функцию ssh-add, но это не поможет, потому что этот пользователь фактически создал экземпляр, используя созданную им пару ключей. Экземпляры, на которые я ссылаюсь, были созданы с другой парой ключей, к которой у меня нет доступа.
Крис Вагнер

1
Может быть, вам лучше задать этот вопрос на serverfault.com
Клод Ведовини

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

Ответы:


172

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

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


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

87

Хотя вы не можете напрямую добавить пару ключей к работающему экземпляру 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 ubuntu@111.111.11.111
    
  2. Шаг 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. Шаг 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. Шаг 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. Шаг 5: время проверить ваш ключ :

    $ ssh -i john john@111.111.11.111
    

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


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

Это работает для меня. Но как мне перейти к пользователю Ubuntu отсюда, так как файлы, над которыми я буду работать, находятся в каталоге пользователя Ubuntu. Это приведет меня в группу пользователей john. Ubuntu 14.04.4 LTS
olyjosh

Это не сработало для меня. Это дало недействительные разрешения. Мне пришлось создать пару ключей из консоли ec2, после чего она начала работать
темный рыцарь

11

На локальном компьютере запустите команду:

ssh-keygen -t rsa -C "SomeAlias"

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

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

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


Таким образом, как упомянул @Dan, можно изменить доступ к вашему экземпляру, редактируя этот файл, но вы никогда не сможете изменить пару ключей, связанную с экземпляром, на уровне метаданных. Не забудьте добавить имя файла .pem в конце вашего publicKey, например:ssh-rsa AAAAB3NzaC1yc2EA...DsGt66 my-key-pair
Ricardo

7

Это случилось со мной ранее (у меня не было доступа к экземпляру EC2, который кто-то создал, но у него был доступ к веб-консоли AWS), и я написал в блоге ответ: http://readystate4.com/2013/04/09/aws-gaining- SSH-доступ к ан-ec2 инстанции, что вы потеряли-доступ-к /

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

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


6

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


1
Спасибо, @ kamal-essajidi! Для других, использующих EB: если у вас есть пара ключей, вы можете добавить ее в свой Elastic Beanstalk в разделе «Конфигурация> Экземпляры> Пара ключей EC2».
Скотт

4

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

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

4

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

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



3

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

  • Создайте пару ключ-значение из EC2 -> Пары ключей (на вкладке СЕТЬ И БЕЗОПАСНОСТЬ)
  • Перейдите на Elasticbeanstalk и нажмите на ваше приложение
  • Перейти на страницу конфигурации и изменить настройки безопасности
  • Выберите пару ключей EC2 и нажмите «Применить»
  • Нажмите подтвердить, чтобы подтвердить обновление. Это приведет к прекращению работы среды и применению значения ключа к вашей среде.

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.