Додайте ключ до існуючого екземпляра EC2


240

Мені надали доступ до консолі AWS до облікового запису з двома примірниками, які я не можу закрити (у виробництві). Однак я хотів би отримати доступ SSH до цих примірників, чи можна створити нову Keypair і застосувати її до примірників, щоб я міг SSH? Отримання існуючого файлу pem для ключа, в якому створені екземпляри, наразі не є можливим.

Якщо це неможливо, чи є інший спосіб я потрапити в екземпляри?


Ви спробували рішення тут: stackoverflow.com/questions/1454629/… ? ssh-addслід робити те, що потрібно.
Марк Боллінгер

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

1
Можливо, вам буде краще задати це питання на serverfault.com
Клод Ведовині,

4
Ви не можете застосувати ключ до запущеного екземпляра.
Rodney Quillo

Відповіді:


172

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

Для відновлення, якщо це завантажувальний AMI EBS, ви можете зупинити його, зробити знімок обсягу. Створіть на ній новий том. І мати можливість використовувати його для запуску старого примірника, створення нового зображення або відновлення даних.

Хоча дані на ефемерному сховищі будуть втрачені.


Через популярність цього питання та відповіді я хотів зафіксувати інформацію за посиланням, яке Родні розмістив у своєму коментарі.

Кредит належить Еріку Хаммону за цю інформацію .

Виправлення файлів на кореневому томі EBS екземпляра EC2

Ви можете досліджувати та редагувати файли в кореневому томі EBS на екземплярі EC2, навіть якщо ви знаходитесь у ситуації, що ви вважали катастрофічною:

  • Ви втратили ключ ssh або забули свій пароль
  • Ви помилилися редагувати файл / etc / sudoers і більше не можете отримати кореневий доступ із 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 / тощо / sudoers
  • Шукайте повідомлення про помилки в / vol-a / var / log / syslog
  • Скопіюйте важливі файли з / vol-a /…

Примітка. Посібники для двох примірників можуть бути не однаковими, тому будьте уважні, якщо ви створюєте, редагуєте чи копіюєте файли, що належать користувачам, які не користуються коренем. Наприклад, ваш користувач 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-адресу для примірника А, коли ви зупинили її, вам потрібно буде знову пов’язати її після її повторного запуску.

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


чи можете ви сказати нам покроковий посібник для цього (або вказати на нього). У моєму випадку у мене є існуючий запущений екземпляр і мені потрібно увійти до нього з віддаленого місця, де у мене немає приватного ключа.
липня 1111 року

87

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

У вашому випадку ви можете попросити власника екземпляра (який його створив) зробити наступне. Таким чином, власнику екземпляра не потрібно ділитися з вами власними ключами, але ви все одно зможете ввімкнути їх у ці екземпляри. Ці кроки були спочатку розміщені Уткаршем Сенгаром (ака. @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. Створіть нового користувача, ми назвемо нового користувача «john» :

    [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
    

    Додайте "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
    

    На вищенаведеному кроці, Джон - це створений нами користувач, а ubuntu - група користувачів за замовчуванням.

    [john@ip-11-111-111-111 ~]$ sudo chown john:ubuntu .ssh/authorized_keys
    
  4. Крок 4: тепер вам просто потрібно завантажити ключ під назвою "john" . Я використовую scp для завантаження / завантаження файлів з EC2, ось як це можна зробити.

    Вам все одно потрібно буде скопіювати файл за допомогою користувача ubuntu , оскільки у вас є лише ключ для цього імені користувача. Отже, вам потрібно буде перемістити ключ до папки ubuntu і chmod його до 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
олійош

Це не спрацювало для мене. Це дало недійсні дозволи. Мені довелося створити ключову пару з консолі ec2, тоді вона почала працювати
темний лицар

11

На локальній машині запустіть команду:

ssh-keygen -t rsa -C "SomeAlias"

Після виконання цієї команди буде створено файл, що закінчується на * .pub. Скопіюйте вміст цього файлу.

На машині Amazon відредагуйте ~ / .ssh / pooblasti_keys та вставте вміст файлу * .pub (спочатку видаліть будь-який наявний вміст).

Потім можна SSH, використовуючи інший файл, сформований за допомогою команди ssh-keygen (приватний ключ).


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

7

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

В основному, ви можете від'єднати привід 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: після того, як у вас є пара ключів, ви можете додати її до своєї еластичної підставки в конфігурації> екземпляри> 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

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

Просто вставте у вікно EC2 наявну пару ключів. Потім відредагуйте ~ / .ssh / autori_keys та додайте новий ключ у новий рядок. Вийдіть і сш через нову машину. Успіху!



3

Для середовищ Elasticbeanstalk ви можете застосувати пару ключових значень до запущеного екземпляра на зразок цього:

  • Створіть пара ключ-значення з EC2 -> Key Pairs (на вкладці "МЕРЕЖА І БЕЗПЕКА")
  • Перейдіть на Elasticbeanstalk і натисніть на вашу заявку
  • Перейдіть на сторінку конфігурації та змініть налаштування безпеки
  • Виберіть пару клавіш EC2 і натисніть Застосувати
  • Клацніть підтвердити, щоб підтвердити оновлення. Це припинить оточення та застосує ключове значення до вашого оточення.

1

Ви можете фактично додати пару ключів через сторінку еластичного конфігурації. Потім він перезапускає ваш примірник для вас і все працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.