Bagaimana SSH ke EC2 misalnya dalam subnet pribadi VPC melalui server NAT

16

Saya telah membuat VPC di aws dengan subnet publik dan subnet pribadi. Subnet pribadi tidak memiliki akses langsung ke jaringan eksternal. Jadi, ada server NAT di subnet publik yang meneruskan semua lalu lintas keluar dari subnet pribadi ke jaringan luar.

Saat ini, saya dapat SSH dari subnet publik ke subnet pribadi, juga SSH dari NAT ke subnet pribadi. Namun, yang saya inginkan adalah SSH dari mesin apa pun (laptop rumah, mesin kantor, dan seluler) hingga instance di subnet pribadi.

Saya telah melakukan beberapa penelitian bahwa saya dapat mengatur kotak NAT untuk meneruskan SSH ke instance di subnet pribadi. Tapi saya tidak beruntung karena ini.

Adakah yang bisa mendaftar apa yang saya perlu setup untuk membuat ini mungkin.

Penamaan adalah:

laptop (perangkat apa pun di luar VPC)

nat (server NAT di subnet publik)

tujuan (server di subnet pribadi yang ingin saya sambungkan)

Tidak yakin yang berikut ini adalah batasan atau tidak:

"Tujuan" tidak memiliki IP publik, hanya ip subnet, misalnya 10.0.0.1 "tujuan" tidak dapat terhubung ke "nat" melalui publik nat. Ada beberapa server "tujuan", apakah saya perlu mengatur satu untuk masing-masing?

Terima kasih

jasonfungsing
sumber
Tautan ini menguraikan langkah-langkah yang diperlukan untuk menghubungkan ke instance EC2 di Private Subnet melalui SSH Agent Forwarding.
Shailender Rawat

Jawaban:

25

Anda dapat mengatur host bastion untuk terhubung ke instance apa pun dalam VPC Anda:

http://blogs.aws.amazon.com/security/post/Tx3N8GFK85UN1G6/Security-connect-to-Linux-instances-running-in-a-private-Amazon-VPC

Anda bisa memilih untuk meluncurkan instance baru yang akan berfungsi sebagai host bastion, atau menggunakan instance NAT yang ada sebagai bastion.

Jika Anda membuat instance baru, sebagai gambaran umum, Anda akan:

1) buat grup keamanan untuk host benteng Anda yang akan memungkinkan akses SSH dari laptop Anda (perhatikan grup keamanan ini untuk langkah 4)

2) luncurkan instance terpisah (bastion) di subnet publik di VPC Anda

3) memberikan benteng host itu IP publik baik saat peluncuran atau dengan menetapkan IP elastis

4) perbarui grup keamanan masing-masing instance Anda yang tidak memiliki IP publik untuk memungkinkan akses SSH dari host benteng. Ini dapat dilakukan dengan menggunakan ID grup keamanan host bastion (sg - #####).

5) menggunakan penerusan agen SSH (ssh -A user @ publicIPofBastion) untuk menghubungkan pertama ke bastion, dan kemudian sekali di bastion, SSH ke setiap instance internal (ssh user @ private-IP-of-Internal-Instance). Penerusan agen menangani penerusan kunci pribadi Anda sehingga tidak harus disimpan pada instance benteng ( jangan pernah menyimpan kunci pribadi pada instance apa pun !! )

Posting blog AWS di atas harus dapat memberikan beberapa seluk-beluk mengenai proses. Saya juga menyertakan yang berikut jika Anda menginginkan detail tambahan tentang bastion hosts:

Konsep Host Bastion: http://en.m.wikipedia.org/wiki/Bastion_host

Jika Anda membutuhkan klarifikasi, jangan ragu untuk berkomentar.

jca-
sumber
3
Pastikan untuk mengizinkan SSH / 22 di inbound dan outbound di benteng.
user464180
Ini adalah titik kritis yang harus menjadi bagian dari jawaban!
Tariq
Selain jawaban yang diterima yang banyak membantu tetapi tidak sepenuhnya, saya harus memastikan bahwa kelompok keamanan memungkinkan lalu lintas masuk dan keluar. Pada pandangan pertama sepertinya sudah dilakukan, tetapi karena saya menggunakan template CloudFormation, saya tidak memperhatikan bahwa sumber untuk lalu lintas masuk ke subnet pribadi adalah ELB saya. Jadi, itu memungkinkan semua lalu lintas tetapi hanya datang dari ELB. Mengubahnya ke subnet publik saya memperbaiki masalah.
Milan Markovic
1

Satu-satunya cara saya bisa membuatnya bekerja.

1) Pastikan bahwa grup keamanan untuk instance pribadi ini memiliki aturan inbound grup keamanan dari subnet publik

Sumber Protokol Ports
Semua Semua sg-0b6616e070b9ea2d (grup keamanan publik)

2) Menggunakan perintah proxy, konfigurasikan file konfigurasi ssh Anda, untuk memiliki sesuatu seperti ini

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

Jalankan ssh privatehost itu harus bekerja

Leonardo Ampuero
sumber
0

Hanya untuk memperjelas: begitu Anda sudah masuk ke host benteng Anda, Anda harus ssh ke host NAT sebagai pengguna ec2-user. Ini membuat saya sedikit kaget, karena biasanya pengguna ubuntu adalah ubuntu di AWS. Jadi saya melakukannya:

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

Juga, ingat bahwa ssh_bastion Anda harus memiliki aturan keluar yang memungkinkan lalu lintas ke host lain dan sg.

Joel
sumber
Apakah itu nama 'ec2_user' sebagai hasil pemintalan Amazon AMI secara khusus, sudah dikonfigurasi untuk layanan NAT? Jadi, bagaimana 'pengguna-ec2' mendapatkan akun di mesin pribadi?
Dennis