Як SSH в ec2 екземпляр в приватній підмережі VPC через NAT-сервер


16

Я створив VPC в aws із загальнодоступною підмережею та приватною підмережею. Приватна підмережа не має прямого доступу до зовнішньої мережі. Отже, в загальнодоступній підмережі є сервер NAT, який пересилає весь вихідний трафік з приватної підмережі у зовнішню мережу.

В даний час я можу SSH з публічної підмережі в приватну підмережу, також SSH з NAT в приватну підмережу. Однак я хочу отримати SSH від будь-якої машини (домашнього ноутбука, офісної машини та мобільного) до примірників приватної підмережі.

Я провів деякі дослідження, що можу встановити NAT-поле, щоб переслати SSH на примірник в приватній підмережі. Але мені в цьому не пощастило.

Хтось може перелічити, що мені потрібно налаштувати, щоб зробити це можливим.

Імена:

ноутбук (будь-який пристрій поза VPC)

nat (NAT-сервер у загальнодоступній підмережі)

призначення (сервер приватної підмережі, до якого я хочу підключитися)

Не впевнені, наступні обмеження чи ні:

"Призначення" не має загальнодоступного IP-адреси, лише підмережа ip, наприклад 10.0.0.1. "Місце призначення" не може з'єднуватися з "nat" через public. Існує кілька серверів "призначення", мені потрібно налаштувати по одному для кожного?

Спасибі


Цей посилання окреслює кроки, необхідні для підключення до екземплярів EC2 в приватній підмережі через SSH Agent Forwarding.
Shailender Rawat

Відповіді:


25

Ви можете налаштувати хост бастіону для підключення до будь-якого екземпляра в межах VPC:

http://blogs.aws.amazon.com/security/post/Tx3N8GFK85UN1G6/Securely-connect-to-Linux-in вещества-running-in-a-private-Amazon-VPC

Ви можете запустити новий екземпляр, який буде функціонувати як хост бастіону, або використовувати існуючий екземпляр NAT як бастіон.

Якщо ви створите новий екземпляр, як огляд, ви зробите:

1) Створіть групу безпеки для свого бастіонного хоста, яка дозволить SSH доступу з вашого ноутбука (зверніть увагу на цю групу безпеки на крок 4)

2) запустіть окремий екземпляр (бастіон) у загальнодоступній підмережі у своєму VPC

3) надати цьому бастіону публічну IP-адресу або при запуску, або шляхом призначення еластичного IP-адреси

4) оновіть групи безпеки кожного вашого примірника, у якого немає публічного IP-адреси, щоб дозволити SSH-доступ із хосту бастіону. Це можна зробити за допомогою ідентифікатора групи безпеки хоста бастіону (sg - #####).

5) використовуйте переадресацію агента SSH (ssh -A user @ publicIPofBastion) для підключення спочатку до бастіону, а потім одного разу в бастіон, SSH у будь-який внутрішній екземпляр (ssh user @ private-IP-of-Internal-Instance). Переадресація агента піклується про пересилання вашого приватного ключа, тому його не потрібно зберігати в екземплярі бастіону ( ніколи не зберігайте приватні ключі в жодному випадку !! )

Публікація в блозі AWS, наведена вище, повинна бути в змозі надати певну делікатність щодо цього процесу. Я також включив нижче, якщо ви хочете отримати додаткову інформацію про хости бастіону:

Концепція господарів Бастіону: http://en.m.wikipedia.org/wiki/Bastion_host

Якщо вам потрібно уточнення, сміливо коментуйте.


3
Не забудьте дозволити SSH / 22 як на вхідному, так і на вихідному бастіоні.
user464180

Це настільки критичний момент, що він повинен бути частиною відповіді!
Тарік

На додаток до прийнятої відповіді, яка дуже допомагає, але не повністю, я повинен був переконатися, що групи безпеки дозволяють в'їзний та виїзний трафік. На перший погляд це виглядало так, як вони вже роблять, але, оскільки я використовував шаблон CloudFormation, я не помітив, що джерелом вхідного трафіку в приватну підмережу був мій ELB. Таким чином, це дозволило весь трафік, але тільки з ELB. Змінивши це в моїй загальнодоступній підмережі, виправили проблему.
Мілан Маркович

1

Єдиний спосіб я міг змусити це працювати.

1) Переконайтеся, що група безпеки для цього приватного примірника має вхідне правило групи безпеки із загальнодоступної підмережі

Джерело протоколів портів
Усі всі sg-0b6616e070b9ea2d (група громадської безпеки)

2) За допомогою команд проксі налаштуйте файл ssh config, щоб він мав щось подібне

vim ~/.ssh/config

Host publichost
   HostName 24.123.34.45
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand none
Host privatehost
   HostName 10.0.2.133
   User ubuntu
   IdentityFile ~/mypem.pem
   ProxyCommand ssh publichost -W %h:%p

Запустити ssh privatehost це повинно працювати


0

Просто для уточнення: як тільки ви ssh'd у своєму бастіонному хості, вам потрібно ввійти в NAT хост як користувач ec2-user. Це мене трохи натхнуло, оскільки користувач ubuntu зазвичай є ubuntu на AWS. Так я і зробив:

laptop> ssh -A ubuntu@ssh_bastion
ssh_bastion> ssh ec2-user@nat_private_dns_or_private_ip

Крім того, пам’ятайте, що ваш ssh_bastion повинен мати вихідне правило, яке дозволяє передавати трафік іншим хостам і sg.


Це ім'я 'ec2_user' в результаті спеціально розкрученого Amazon AMI, вже налаштованого на сервіс NAT? Отже, як "користувач ec2" отримав обліковий запис на приватній машині?
Денніс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.