- Пошаговая инструкция по восстановлению доступа к Linux Amazon EC2 инстансу при потере pem-файла
- Шаг 1. Подготовка
- Шаг 2. Создание временного инстанса
- Шаг 3. Подключение корневого диска с восстанавливаемой машины к временному инстансу
- Шаг 4. Подготовка ключей для подключения к инстансу по SSH
- Шаг 5. Подключение к временному инстансу по SSH
- Шаг 6. Копирование ключей с временного инстанса на оригинальный
- Шаг 7. Запуск инстанса с восстановленным доступом по SSH
- Шаг 8. Проверка доступа
- Шаг 9. Завершающий этап
Пошаговая инструкция по восстановлению доступа к Linux Amazon EC2 инстансу при потере pem-файла
Если при создании Linux-инстанса в AWS не была создана пара ключей (KeyPair) для доступа к нему через SSH либо они утеряны, то необходимо совершить ряд операций для получения доступа к машине. К уже запущенному инстансу добавить ключи через консоль AWS невозможно. Существует три способа, с помощью которых мы сможем восстановить доступ по SSH к инстансу.
Самый простой способ — настройка ключа с использованием механизма cloud-init (спасибо за подсказку yusman). Но он не работает если права на директорию /home повреждены или дистрибутив не поддерживает директивы cloud-init.
Второй способ — создание образа (Amazon Machine Image) с существующего инстанса и последующий запуск нового инстанса на его основе, но с созданием ключа. Таким образом фактически будет клонирована существующая машина с той лишь разницей, что на последнем этапе возможно создать новые ключи. Создание образа может занять длительное время для инстанса с дисками большого объема, и вам придется настраивать все сервисы, завязанные на эту машину заново. Поэтому данный способ в большинстве случаев займет больше времени.
В официальной документации от Amazon описывается и другой способ. Он позволяет восстановить доступ и свести к минимуму издержки на перенастройку сервисов (по сравнению со вторым способом), которые завязаны на инстанс, к которому потерян доступ. В статье дается его пошаговое описание.
Внимание! Этот способ работает только для инстансов, в которых в качестве корневого устройства используется блочное хранилище (Amazon Elastic Block Store), и не работает для локального хранилища инстансов (Amazon EC2 Instance Store).
Чтобы узнать, какой тип корневого устройства используется у вас, откройте Amazon EC2 консоль, перейдите в Instances, выберите инстанс и проверьте значение параметра Root device type в панели с детальной информацией.
Шаг 1. Подготовка
Для начала необходимо сохранить некоторую информацию, чтобы не пришлось отвлекаться и не переходить на другие экраны (тем более это будет очень неудобно). Все данные можно найти в детальной информации инстанса (как туда попасть вы уже знаете). Запишите следующие настройки:
- Instance ID
- AMI ID
- EBS ID
- Root device
- Availability zone
Для инстанса, запущенного в VPC , сохраните значение VPC ID.
Для EC2-classic: eсли для инстанса создан эластичный IP-адрес (Elastic IP), то необходимо сохранить и его значение.
Для получения идентификатора блочного хранилища (EBS ID) необходимо кликнуть по названию Root device.
Шаг 2. Создание временного инстанса
Следующий этап — создание инстанса, с помощью которого вы будете восстанавливать ключи на оригинальном инстансе. Можно пропустить этот шаг, если у вас есть другой запущенный инстанс, находящийся в той же зоне (Availability zone), что и восстанавливаемый, и при этом он создан с использованием такого же AMI или версия операционной системы на нем позволит подключить диск с оригинального инстанса и скопировать на него ключи SSH. Если такого инстанса нет, то выполните следующие действия:
- Перейдите в консоль EC2 (на дашборд или в меню Instances) и нажмите Launch Instance
- На странице выбора AMI (Choose an Amazon Machine Image) выберите такой, который использовался для создания оригинального инстанса (его вы записывали на первом шаге — AMI ID). Если по какой-то причине этот AMI недоступен, можно создать образ с оригинального инстанса и использовать его либо выбрать такой тип AMI, к которому бы можно было подключить корневой диск восстанавливаемого инстанса
- На странице выбора типа инстанса (Choose an Instance Type) выберите самый дешевый из доступных типов
- На странице с детальной информацией (Configure Instance Details) укажите такую же зону (Availability Zone), как в нашем инстансе. Если он запущен в VPC, выберите в пункте Network аналогичную VPC и укажите подсеть (subnet) в данной зоне.
При этом настройки Network Interfaces нет необходимости менять.
Шаг 3. Подключение корневого диска с восстанавливаемой машины к временному инстансу
Сначала необходимо отключить диск от оригинального инстанса и подключить его к временному. Так как это корневой диск, перед его отключением оригинальный инстанс придется остановить.
- Перейдите в консоль EC2 в раздел Instances и выберите оригинальный инстанс (его можно определить по записанному ранее Instance ID либо по имени, которое отличается от того которое вы указали при создании временного инстанса).
Далее в меню Actions — Instance State — Stop.
Внимание! Когда останавливается инстанс, все данные на локальных хранилищах (Amazon EC2 Instance Store) стираются. Если у вас есть данные на таких томах, позаботьтесь об их сохранности, перенеся их на постоянное хранилище, если это необходимо.
После того как инстанс остановлен, переходите в раздел Elastic Block Store — Volumes и выбирайте корневой том оригинального инстанса. Его можно определить по сохраненному Volume ID либо основываясь на информации из колонки Attachment Information, в которой содержится название инстанса.
Далее в меню Actions — Detach Volume
Подключите этот том к временному инстансу. Для этого выберите его снова, далее в меню Actions — Attach Volume и в появившемся диалоговом окне укажите ваш временный инстанс.
После чего нажимайте Attach. В случае, если оригинальный инстанс создавался через AWS Marketplace AMI и раздел содержит коды AWS Marketplace, вы получите ошибку, в которой говорится о том, что нельзя подключить раздел с кодами к работающему инстансу.
В этом случае остановите наш временный инстанс и заново выполните действия по подключению корневого тома оригинального инстанса к временному инстансу. Вторая попытка должна быть удачной.
Теперь вы должны увидеть, что оба диска подключены к временному инстансу.
Если вы останавливали инстанс, запустите его:
- Перейдите в раздел Instances в навигационной панели
- Выберите временный инстанс
- Далее в меню Actions — Instance State — Start.
Шаг 4. Подготовка ключей для подключения к инстансу по SSH
Пользователям Linux нет необходимости генерировать какие-то дополнительные ключи. Необходимо лишь дать права на чтение этого файла:
chmod 400 my-keypair.pem
Для подключения к Linux-машине мы будем использовать утилиту PuTTY, поэтому, если она у вас не установлена, скачайте её. Для подключения по SSH с её помощью, вам понадобится ppk-ключ, в то время как с AWS был сохранён ключ в формате pem. Для того, чтобы получить ключ к нужном формате, сделайте следующее:
- Откройте PuTTYgen (устанавливается вместе с PuTTY)
- Выберите в параметрах RSA 2048 бит
Шаг 5. Подключение к временному инстансу по SSH
Подключитесь по 22 порту с использованием ключа. Имя пользователя зависит от того, какой AMI использовался при создании инстанса. Его вы записывали в самом начале. Возможны следующие имена пользователей:
- Amazon Linux 2 или Amazon Linux AMI — ec2-user
- Centos AMI — centos
- Debian AMI — admin или root
- Fedora AMI — ec2-user или fedora
- RHEL AMI — ec2-user или root
- SUSE AMI — ec2-user или root
- Ubuntu AMI — ubuntu
- Для остальных, если имена ec2-user и root не работают — обратитесь к поставщику AMI
Название хоста, к которому надо подключаться, — user@aws-host.amazon.com, где user — имя, которое описано выше, а aws-host.amazon.com — ip-адрес вашего инстанса, который можно найти на вкладке детальной информации (с неё вы в самом начале сохраняли параметры). Параметр называется IPv4 Public IP. Обратите внимание, что если вы не используете Elastic IP, при каждом старте инстанса у него будет новый ip-адрес.
- Запустите PuTTY
- В поле Host Name адрес в формате имя_пользователя@ip-адрес
Шаг 6. Копирование ключей с временного инстанса на оригинальный
Смонтируйте том, который вы подключили к временному инстансу, чтобы вы могли получить доступ к его файловой системе.
Например, если имя диска /dev/sdf (может отображаться по-разному на вашем инстансе), используйте следующие операции для монтирования тома в /mnt/tempvol :
- Определите названия разделов подключенного диска:
/dev/xvda1 и /dev/xvdf1 — разделы дисков. У /dev/xvdf1 не указана точка монтирования (MOUNTPOINT), значит это раздел диска, который мы подключили ранее.
Создайте временную директорию для монтирования раздела:
]$ sudo mkdir /mnt/tempvol
Смонтируйте раздел в созданный каталог:
]$ sudo mount /dev/ xvdf1 /mnt/tempvol
Скопируйте SSH-ключи с временного инстанса на смонтированный раздел.
Внимание! Используйте имя пользователя, которое указано в командной строке. Это необходимо, так как несмотря на то, что вы успешно подключились со стандартным именем пользователя, которое зависит от операционной системы (описано в шаге 5), в AMI из AWS Marketplace оно может быть другим после входа. Например, для AMI WordPress Certified by Bitnami при входе по SSH используется стандартный логин для Ubuntu — ubuntu . Однако имя пользователя после входа в систему — bitnami
Например, если имя пользователя ubuntu , используйте следующую команду для копирования:
]$ cp .ssh/authorized_keys /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
Если у вас нет прав на редактирование файлов в /mnt/tempvol , то скопируйте файлы с использованием sudo и проверьте права, чтобы удостовериться, что вы сможете зайти на оригинальный инстанс:
- Проверьте права на файл:
]$ 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 :
]$ sudo cp .ssh/authorized_keys /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
Проверьте, не изменились ли права на файл:
]$ sudo ls -l /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
Если права изменились, восстановите их:
]$ sudo chown 200 : 500 /mnt/tempvol/home/ ubuntu /.ssh/authorized_keys
]$ sudo umount /mnt/tempvol
Шаг 7. Запуск инстанса с восстановленным доступом по SSH
- В консоли EC2 выберите диск, который вы подключали к временному, и в меню: Actions — Detach Volume. Дождитесь, пока состояние (state) диска станет available (можете использовать кнопку Refresh для обновления информации).
Не забудьте предварительно остановить инстанс, если раздел содержит коды AWS Marketplace.
Нажмите Attach
- Перейдите в раздел Elastic IP на навигационной панели
- Выберите адрес Elastic IP, который вы записали в самом начале
- Далее Actions — Associate address
- Выберите ID оригинального инстанса и нажмите Associate
Шаг 8. Проверка доступа
Подключитесь к инстансу с восстановленным доступом с помощью созданного ключа.
Если имя новой пары ключей отличается от того, который был ранее, убедитесь, что вы подключаетесь с использованием нового приватного ключа.
Шаг 9. Завершающий этап
Если вы создавали новый временный инстанс для того, чтобы выполнить все операции, а не использовали уже существующий, остановите его, если он вам больше не нужен:
- Перейдите в раздел Instances на навигационной панели
- Выберите временный инстанс
- Далее в меню Actions — Instance State — Terminate
Таким образом вы восстановили доступ к Linux Amazon EC2 инстансу.
Источник