Пошаговая инструкция по восстановлению доступа к Linux Amazon EC2 инстансу при потере pem-файла +6


Если при создании 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 в панели с детальной информацией.

Тип корневого устройства инстанса

Если на вашей машине EBS, то данный способ подходит для вас.

Шаг 1. Подготовка


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

  • Instance ID
  • AMI ID
  • EBS ID
  • Root device
  • Availability zone

Для инстанса, запущенного в VPC, сохраните значение VPC ID.

Для EC2-classic: eсли для инстанса создан эластичный IP-адрес (Elastic IP), то необходимо сохранить и его значение.

Настройки инстанса, которые необходимо сохранить
Изображение кликабельно

Для получения идентификатора блочного хранилища (EBS ID) необходимо кликнуть по названию Root device.

EBS ID


Шаг 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) в данной зоне.

    Настройка Availability Zone

    При этом настройки Network Interfaces нет необходимости менять.
  • На странице редактирования хранилища (Add Storage) никаких изменений не требуется
  • На странице тэгов (Add Tags) добавьте имя для временного инстанса, чтобы его было легко идентифицировать и потом не тратить время на сверку Instance ID и EBS ID, так как на страницах, где надо будет определить с каким инстансом или томом вы работаете, в названии будет фигурировать это значение.

    Имя на странице Add Tags

  • Жмите Review and Launch, а затем Launch
  • Последний этап — выбор существующей пары ключей либо создание новой. Загрузите файл ключа (pem) и не забудьте сделать бэкап, чтобы все операции не пришлось выполнять заново.

    Сохранение KeyPair
  • После того, как сохранили файл, запустите инстанс кнопкой Launch Instances


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

    Ошибка при подключении диска с AWS Marketplace кодами

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

    Оба диска подключены к временному инстансу
  • Если вы останавливали инстанс, запустите его:

    • Перейдите в раздел Instances в навигационной панели
    • Выберите временный инстанс
    • Далее в меню Actions — Instance State — Start.


Шаг 4. Подготовка ключей для подключения к инстансу по SSH


Пользователям Linux нет необходимости генерировать какие-то дополнительные ключи. Необходимо лишь дать права на чтение этого файла:

chmod 400 my-keypair.pem

Подготовка ключей, если вы работаете под Windows
Для подключения к Linux-машине мы будем использовать утилиту PuTTY, поэтому, если она у вас не установлена, скачайте её. Для подключения по SSH с её помощью, вам понадобится ppk-ключ, в то время как с AWS был сохранён ключ в формате pem. Для того, чтобы получить ключ к нужном формате, сделайте следующее:

  • Откройте PuTTYgen (устанавливается вместе с PuTTY)
  • Выберите в параметрах RSA 2048 бит

    RSA 2048 бит
  • Загрузите сохраненный pem-ключ нажав Load (Load an existing private key file)
  • Укажите парольную фразу (key passphrase) и подтвердите её (confirm passphrase). Это делать не обязательно, но так безопасней. Разница будет лишь в том, что при подключении с использованием этого ключа всегда будет предлагаться ввести эту фразу, чтобы подтвердить вход
  • Сохраните файл с тем названием, которое вы указали при создании пары ключей (KeyPair) в процессе создания временного инстанса (название совпадает с именем pem-ключа)

Ключ готов.


Шаг 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-адрес.

Инструкция по подключению для пользователей Windows
  • Запустите PuTTY
  • В поле Host Name адрес в формате имя_пользователя@ip-адрес

    Настройка PuTTY. Host Name

  • Перейдите в раздел Connection — SSH — Auth и загрузите ppk-ключ (Private key file for authentication)
  • Нажмите Open и затем согласитесь доверять серверу
  • Если вы указывали парольную фразу (passphrase) при создании ppk-ключа, введите её, чтобы подтвердить вход:

    Using username "ubuntu".
    Authenticating with public key "imported-openssh-key"
    Passphrase for key "imported-openssh-key":
    

  • Вы на сервере.

    Успешный вход на сервер



Шаг 6. Копирование ключей с временного инстанса на оригинальный


Смонтируйте том, который вы подключили к временному инстансу, чтобы вы могли получить доступ к его файловой системе.

Монтирование раздела
Например, если имя диска /dev/sdf (может отображаться по-разному на вашем инстансе), используйте следующие операции для монтирования тома в /mnt/tempvol:

  • Определите названия разделов подключенного диска:

    [user ~]$ lsblk

    NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda    202:0    0  10G  0 disk
    L-xvda1 202:1    0  10G  0 part /
    xvdf    202:80   0  10G  0 disk
    L-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

Шаг 7. Запуск инстанса с восстановленным доступом по SSH


  • В консоли EC2 выберите диск, который вы подключали к временному, и в меню: Actions — Detach Volume. Дождитесь, пока состояние (state) диска станет available (можете использовать кнопку Refresh для обновления информации).

    Не забудьте предварительно остановить инстанс, если раздел содержит коды AWS Marketplace.
  • Для этого же диска перейдите в меню Actions — Attach Volume
  • Выберите оригинальный инстанс и укажите имя корневого диска, которое вы записали в самом начале.

    Подключение диска
    Изображение кликабельно

    Нажмите Attach
  • Запустите инстанс
  • Для EC2-classic: если для оригинального инстанса был настроен Elastic IP, переассоциируйте его с ним:

    • Перейдите в раздел Elastic IP на навигационной панели
    • Выберите адрес Elastic IP, который вы записали в самом начале
    • Далее Actions — Associate address
    • Выберите ID оригинального инстанса и нажмите Associate


Шаг 8. Проверка доступа


Подключитесь к инстансу с восстановленным доступом с помощью созданного ключа.

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

Шаг 9. Завершающий этап


Если вы создавали новый временный инстанс для того, чтобы выполнить все операции, а не использовали уже существующий, остановите его, если он вам больше не нужен:

  • Перейдите в раздел Instances на навигационной панели
  • Выберите временный инстанс
  • Далее в меню Actions — Instance State — Terminate

Таким образом вы восстановили доступ к Linux Amazon EC2 инстансу.




К сожалению, не доступен сервер mySQL