วิธีการเชื่อมต่อจาก EC2 ไปยัง EC2 อื่นด้วย SSH

เราสามารถเชื่อมต่อจาก EC2 หลักไปยัง EC2 อื่นด้วย SSH ได้โดยย้ายไฟล์ key pair ของ EC2 อื่นที่ต้องการเชื่อมต่อไปยังโฟลเดอร์ .ssh ของ Server EC2 หลัก แล้วรันคำสั่งที่ทำให้สามารถเข้าถึง EC2 อื่นจาก EC2 หลักได้ ซึ่งในบทความนี้ผมจะมาแนะนำวิธีการเชื่อมต่อ EC2 อื่นโดยใช้ key pair ประเภท .pem เพราะว่าผมจะเชื่อมต่อใน VSCode ครับ

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้ผมจะมาแนะนำ วิธีการเชื่อมต่อจาก EC2 ไปยัง EC2 อื่นด้วย SSH

จุดประสงค์การทำ

ผมจะทำการเชื่อมต่อ EC2 Instance (b) จาก EC2 Instance (a) ด้วย SSH ครับ

1. สร้าง EC2 Instance (a)

ให้ทำการติดตั้ง EC2 Instance (Amazon Linux 2) โดยดูตามลิงก์ด้านล่างนี้เป็นตัวอย่างได้เลย (สำหรับคนที่มีอยู่แล้วข้ามขั้นตอนนี้ไปได้เลยครับ)
หมายเหตุ: ไม่ต้องทำหัวข้อย่อยของ ❌ การ Connect to EC2 by PuTTY เพราะว่าเราจะใช้ VSCode เชื่อมต่อกับ Server EC2 Instance ครับ

ส่วนที่ต้องระวังคือ ตอนสร้าง Key Pair เพราะมีส่วนของ Private key file format ที่ตั้งค่าไม่เหมือนกัน ซึ่งในบทความตัวอย่างจะเป็น [ Private key file format: ◉ .ppk ] แต่ในบทความนี้เราจะใช้เป็น [ Private key file format: ◉ .pem ] ครับ

ตัวอย่างตั้งค่าการสร้าง EC2 Instance (a) ในบทความนี้

※Create Key pairs

Key pair

Key pairs:tinnakorn-test-a
Key pair type:RSA
Private key file format: ◉.pem(หากต้องการเชื่อมต่อกับ PuTTY ให้เลือกเป็น [.ppk])

※Launch instances

Name and tags

Name:tinnakorn-test-a

Application and OS Images (Amazon Machine Image)

Amazon Machine Image (AMI):Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(Default)

Instance type

Instance type:t3a.nano

Key pair (login)

Key pair name - required:tinnakorn-test-a

Network settings

Firewall (security groups)

Security group name - required:tinnakorn-test-a
Description - required:tinnakorn-test-a

Inbound security groups rules

Security group rule 1 (TCP, 22, 0.0.0.0/0)

Type:ssh ▼| Source type:My IP ▼| Source:xxx.xxx.x.xxx/32 ✕

Configure storage

1x:8GiBgp2 ▼Root volume (Default)

2. สร้าง EC2 Instance (b)

ตัวอย่างตั้งค่าการสร้าง EC2 Instance (b) ในบทความนี้

※Create Key pairs

Key pair

Key pairs:tinnakorn-test-b
Key pair type:RSA
Private key file format: ◉.pem(หากต้องการเชื่อมต่อกับ PuTTY ให้เลือกเป็น [.ppk])

※Launch instances

Name and tags

Name:tinnakorn-test-b

Application and OS Images (Amazon Machine Image)

Amazon Machine Image (AMI):Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type(Default)

Instance type

Instance type:t3a.nano

Key pair (login)

Key pair name - required:tinnakorn-test-b

Network settings

Firewall (security groups)

Security group name - required:tinnakorn-test-b
Description - required:tinnakorn-test-b

Inbound security groups rules

Security group rule 1 (TCP, 22, 0.0.0.0/0)

Remove

Configure storage

1x:8GiBgp2 ▼Root volume (Default)

3. เชื่อมต่อ SSH ไปยัง EC2 Instance (a)

ตอนนี้ผมก็มี EC2 Instance ทั้ง 2 ตัวดังนี้:
・tinnakorn-test-a
・tinnakorn-test-b
เพื่อให้เข้าใจง่ายขึ้นผมจะเรียก EC2 Instance ตามชื่อเลยครับ

ต่อไปให้ทำการเชื่อมต่อไปยัง tinnakorn-test-a
ให้ดูตัวอย่างการเชื่อมต่อ EC2 Instance ด้วย VSCode ที่ลิงก์บทความด้านล่างนี้

4. อัปโหลดไฟล์ Key Pair (b) ไปยัง EC2 Instance (a)

ขั้นตอนนี้ผมจะอัปโหลดไฟล์ key pair:tinnakorn-test-b.pemไปยัง tinnakorn-test-a และตรวจสอบไฟล์ด้วยคำสั่งllครับ

หน้าจอด้านล่างคือหน้าจอที่ใช้ VSCode ซึ่งการอัปโหลดไฟล์ไปยัง Server EC2 Instance เราสามารถใช้ซอฟต์แวร์อื่นๆ ได้ เช่น WinSCP เป็นต้น

รันคำสั่งนี้เพื่อย้ายไฟล์ tinnakorn-test-b.pem ไปยังโฟลเดอร์ .ssh ของ tinnakorn-test-a

mv tinnakorn-test-b.pem .ssh

รันคำสั่งนี้เพื่อทำให้สามารถเข้าถึง tinnakorn-test-b ได้เฉพาะตัวผู้ใช้งานเท่านั้น (ขั้นตอนนี้สำคัญนะครับ)

chmod 600 .ssh/tinnakorn-test-b.pem

5. การเชื่อมต่อจาก EC2 Instance (a) ไปยัง EC2 Instance (b)

การเชื่อมต่อจาก EC2 Instance (a) ไปยัง EC2 Instance (b) สามารถเชื่อมต่อได้ 2 วิธีดังนี้

5.1 การเชื่อมต่อด้วย Private IPv4 address

ดู VPC ที่ tinnakorn-test-b อยู่ใน Network เดียวกันกับ tinnakorn-test-a ดังนี้
» เข้ามาที่ EC2 Instance:tinnakorn-test-b
» คลิกที่VPC ID

เมื่อเข้ามาหน้า Your VPCs แล้วให้ Copy IPv4 CIDR (172.31.0.0/16)

กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) แล้วเลือกหัวข้อSecurityและคลิกที่Security groups

เลือกหัวข้อInbound rulesและคลิกที่Edit inbound rules

เพิ่ม Inbound rules ดังนี้
คลิกAdd rule
Type:SSH
Source:172.31.0.0/16(IPv4 CIDR ของ VPC)
คลิกSave rules

กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) อีกครั้ง และ Copy Private IPv4 addresses

รันคำสั่งด้านล่างนี้ใน terminal ของ tinnakorn-test-a ตามด้วยพิมพ์yesก็จะสามารถเชื่อมต่อเข้าไปยัง tinnakorn-test-b จาก tinnakorn-test-a ได้ครับ (ใช้ Private IPv4 addresses ของ tinnakorn-test-b ในการเชื่อมต่อ)

ssh -i .ssh/tinnakorn-test-b.pem [Private IPv4 addresses ของ tinnakorn-test-b]

ในกรณีที่ VPC เหมือนกัน เราขอแนะนำให้ใช้ Private IP ในการเชื่อมต่อ นั่นเป็นเพราะว่าการใช้ Private IP จะทำให้การเชื่อมต่อตอบสนองเร็วกว่า และในกรณีที่อยู่ใน VPC ที่ต่างกัน จะไม่สามารถเชื่อมต่อด้วย Private IP ได้ ดังนั้นให้ทำการเชื่อมต่อด้วย Public IP ตามที่อธิบายไว้ในขั้นตอนถัดไปครับ

5.2 การเชื่อมต่อด้วย Public IPv4 address

มาที่หน้า EC2 Instance (tinnakorn-test-a) และ Copy Public IP

เข้าไปยัง Inbound rules ของ tinnakorn-test-b เหมือนขั้นตอนที่แล้ว จากนั้นเพิ่ม Rule ดังนี้
คลิกAdd rule
Type:SSH
Source:54.xxx.xxx.xxx(Public IPv4 address ของ tinnakorn-test-a)
ในส่วนของ Source นี้เราสามารถตั้งค่า Anywhere-IPv4 เพื่ออนุญาตการเชื่อมต่อทั้งหมดได้ (แต่ไม่แนะนำเนื่องจากว่าจะทำให้เว็บไซต์ถูกโจมตีได้ง่ายครับ)
คลิกSave rules

กลับมาที่หน้า EC2 Instance (tinnakorn-test-b) อีกครั้ง และ Copy Public IPv4 address

รันคำสั่งด้านล่างนี้ใน terminal ของ tinnakorn-test-a ตามด้วยพิมพ์yesก็จะสามารถเชื่อมต่อเข้าไปยัง tinnakorn-test-b จาก tinnakorn-test-a ได้ครับ (ใช้ Public IPv4 address ของ tinnakorn-test-b ในการเชื่อมต่อ)

ssh -i .ssh/tinnakorn-test-b.pem [Public IPv4 address ของ tinnakorn-test-b]

สรุป

การสาธิตนี้ก็แสดงให้เห็นว่าเราสามารถเชื่อมต่อ EC2 อื่นจาก EC2 หลักได้โดยใช้วิธีการย้ายไฟล์ key pair (.pem) ไปยังโฟลเดอร์ .ssh ของ Server EC2 หลัก จากนั้นก็รันคำสั่งที่ทำให้เราเข้าถึงและสามารถเชื่อมต่อเข้าไปยัง EC2 อื่นจาก EC2 หลักได้

ในกรณีที่ต้องการใช้ PuTTY ก็จะต้องเป็นไฟล์ key pair ประเภท (.ppk) นะครับ ส่วนวิธีทำเหมือนกับบทความนี้เลย เพียงแค่เรารู้วิธีการย้ายไฟล์เข้าไปยังโฟลเดอร์ .ssh ของ Server EC2 หลัก แล้วรันคำสั่งตามบทความนี้ก็จะทำให้เราสามารถเชื่อมต่อไปยัง EC2 อื่นจาก EC2 หลักได้อย่างง่ายดาย

นอกจากนี้วิธีการเชื่อมต่อไปยัง EC2 อื่นก็จะมี 2 วิธีคือ [การเชื่อมต่อด้วย Private IPv4 address และ การเชื่อมต่อด้วย Public IPv4 address] ทีนี้ก็ขึ้นอยู่กับผู้ใช้งาน ถ้าสะดวกวิธีไหนก็ใช้วิธีนั้นได้เลยครับ

บทความที่เกี่ยวข้อง