- PVSM.RU - https://www.pvsm.ru -
Если при создании Linux-инстанса в AWS не была создана пара ключей (KeyPair) для доступа к нему через SSH либо они утеряны, то необходимо совершить ряд операций для получения доступа к машине. К уже запущенному инстансу добавить ключи через консоль AWS невозможно. Существует три способа, с помощью которых мы сможем восстановить доступ по SSH к инстансу.
Самый простой способ — настройка ключа с использованием механизма cloud-init [1] (спасибо за подсказку yusman [2]). Но он не работает если права на директорию /home
повреждены или дистрибутив не поддерживает директивы cloud-init.
Второй способ — создание образа [3] (Amazon Machine Image) с существующего инстанса и последующий запуск нового инстанса на его основе, но с созданием ключа. Таким образом фактически будет клонирована существующая машина с той лишь разницей, что на последнем этапе возможно создать новые ключи. Создание образа может занять длительное время для инстанса с дисками большого объема, и вам придется настраивать все сервисы, завязанные на эту машину заново. Поэтому данный способ в большинстве случаев займет больше времени.
В официальной документации от Amazon описывается и другой способ [4]. Он позволяет восстановить доступ и свести к минимуму издержки на перенастройку сервисов (по сравнению со вторым способом), которые завязаны на инстанс, к которому потерян доступ. В статье дается его пошаговое описание.
Внимание! Этот способ работает только для инстансов, в которых в качестве корневого устройства используется блочное хранилище (Amazon Elastic Block Store), и не работает для локального хранилища инстансов (Amazon EC2 Instance Store).
Чтобы узнать, какой тип корневого устройства используется у вас, откройте Amazon EC2 консоль, перейдите в Instances, выберите инстанс и проверьте значение параметра Root device type в панели с детальной информацией.
Если на вашей машине EBS, то данный способ подходит для вас.
Для начала необходимо сохранить некоторую информацию, чтобы не пришлось отвлекаться и не переходить на другие экраны (тем более это будет очень неудобно). Все данные можно найти в детальной информации инстанса (как туда попасть вы уже знаете). Запишите следующие настройки:
Для инстанса, запущенного в VPC, сохраните значение VPC ID.
Для EC2-classic: eсли для инстанса создан эластичный IP-адрес (Elastic IP), то необходимо сохранить и его значение.
Изображение кликабельно
Для получения идентификатора блочного хранилища (EBS ID) необходимо кликнуть по названию Root device.
Следующий этап — создание инстанса, с помощью которого вы будете восстанавливать ключи на оригинальном инстансе. Можно пропустить этот шаг, если у вас есть другой запущенный инстанс, находящийся в той же зоне (Availability zone), что и восстанавливаемый, и при этом он создан с использованием такого же AMI или версия операционной системы на нем позволит подключить диск с оригинального инстанса и скопировать на него ключи SSH. Если такого инстанса нет, то выполните следующие действия:
При этом настройки Network Interfaces нет необходимости менять.
Сначала необходимо отключить диск от оригинального инстанса и подключить его к временному. Так как это корневой диск, перед его отключением оригинальный инстанс придется остановить.
Далее в меню Actions — Instance State — Stop.
Внимание! Когда останавливается инстанс, все данные на локальных хранилищах (Amazon EC2 Instance Store) стираются. Если у вас есть данные на таких томах, позаботьтесь об их сохранности, перенеся их на постоянное хранилище, если это необходимо.
Далее в меню Actions — Detach Volume
После чего нажимайте Attach. В случае, если оригинальный инстанс создавался через AWS Marketplace AMI и раздел содержит коды AWS Marketplace, вы получите ошибку, в которой говорится о том, что нельзя подключить раздел с кодами к работающему инстансу.
В этом случае остановите наш временный инстанс и заново выполните действия по подключению корневого тома оригинального инстанса к временному инстансу. Вторая попытка должна быть удачной.
Пользователям Linux нет необходимости генерировать какие-то дополнительные ключи. Необходимо лишь дать права на чтение этого файла:
chmod 400 my-keypair.pem
Ключ готов.
Подключитесь по 22 порту с использованием ключа. Имя пользователя зависит от того, какой AMI использовался при создании инстанса. Его вы записывали в самом начале. Возможны следующие имена пользователей:
Название хоста, к которому надо подключаться, — user@aws-host.amazon.com, где user — имя, которое описано выше, а aws-host.amazon.com — ip-адрес вашего инстанса, который можно найти на вкладке детальной информации (с неё вы в самом начале сохраняли параметры). Параметр называется IPv4 Public IP. Обратите внимание, что если вы не используете Elastic IP, при каждом старте инстанса у него будет новый ip-адрес.
Using username "ubuntu".
Authenticating with public key "imported-openssh-key"
Passphrase for key "imported-openssh-key":
Смонтируйте том, который вы подключили к временному инстансу, чтобы вы могли получить доступ к его файловой системе.
/dev/sdf
(может отображаться по-разному на вашем инстансе), используйте следующие операции для монтирования тома в /mnt/tempvol
:
[user ~]$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 10G 0 disk
└─xvda1 202:1 0 10G 0 part /
xvdf 202:80 0 10G 0 disk
└─xvdf1 202:81 0 10G 0 part
/dev/xvda1
и /dev/xvdf1
— разделы дисков. У /dev/xvdf1
не указана точка монтирования (MOUNTPOINT), значит это раздел диска, который мы подключили ранее.
[user ~]$ sudo mkdir /mnt/tempvol
[user ~]$ sudo mount /dev/xvdf1 /mnt/tempvol
Скопируйте SSH-ключи с временного инстанса на смонтированный раздел.
Внимание! Используйте имя пользователя, которое указано в командной строке. Это необходимо, так как несмотря на то, что вы успешно подключились со стандартным именем пользователя, которое зависит от операционной системы (описано в шаге 5), в AMI из AWS Marketplace оно может быть другим после входа. Например, для AMI WordPress Certified by Bitnami при входе по SSH используется стандартный логин для Ubuntu — ubuntu
. Однако имя пользователя после входа в систему — bitnami
ubuntu
, используйте следующую команду для копирования:
[user ~]$ cp .ssh/authorized_keys /mnt/tempvol/home/ubuntu/.ssh/authorized_keys
Если у вас нет прав на редактирование файлов в /mnt/tempvol
, то скопируйте файлы с использованием sudo
и проверьте права, чтобы удостовериться, что вы сможете зайти на оригинальный инстанс:
[user ~]$ sudo ls -l /mnt/tempvol/home/ubuntu/.ssh/authorized_keys
total 4
-rw------- 1 200 500 392 Aug 15 00:06 authorized_keys
В примере, 200 — это ID пользователя и 500 — ID группы.
sudo
:
[user ~]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ubuntu/.ssh/authorized_keys
[user ~]$ sudo ls -l /mnt/tempvol/home/ubuntu/.ssh/authorized_keys
Если права изменились, восстановите их:
[user ~]$ sudo chown 200:500 /mnt/tempvol/home/ubuntu/.ssh/authorized_keys
Отмонтируйте раздел:
[user ~]$ sudo umount /mnt/tempvol
Не забудьте предварительно остановить инстанс, если раздел содержит коды AWS Marketplace.
Изображение кликабельно
Нажмите Attach
Подключитесь к инстансу с восстановленным доступом с помощью созданного ключа.
Если имя новой пары ключей отличается от того, который был ранее, убедитесь, что вы подключаетесь с использованием нового приватного ключа.
Если вы создавали новый временный инстанс для того, чтобы выполнить все операции, а не использовали уже существующий, остановите его, если он вам больше не нужен:
Таким образом вы восстановили доступ к Linux Amazon EC2 инстансу.
Автор: Xordal
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/289381
Ссылки в тексте:
[1] настройка ключа с использованием механизма cloud-init: https://aws.amazon.com/premiumsupport/knowledge-center/ec2-server-refused-our-key/
[2] yusman: https://habr.com/users/yusman/
[3] создание образа: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html
[4] другой способ: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#replacing-lost-key-pair
[5] скачайте: https://www.putty.org/
[6] Источник: https://habr.com/post/420297/?utm_campaign=420297
Нажмите здесь для печати.