วิธีใช้ SSH Keys ใน DirectAdmin

SSH Keys ช่วยให้เชื่อมต่อเซิร์ฟเวอร์ผ่าน SSH ได้โดยไม่ต้องพิมพ์รหัสผ่านทุกครั้ง ปลอดภัยกว่าการใช้ Password Login และสะดวกสำหรับการทำงาน Automation สำหรับ Developer หรือผู้ดูแลเซิร์ฟเวอร์ การใช้ SSH Key เป็นมาตรฐานที่ควรปฏิบัติทุกครั้งที่จัดการเซิร์ฟเวอร์ผ่าน Command Line เพราะช่วยลดความเสี่ยงจาก Brute-force Attack ได้อย่างมีนัยสำคัญ ในบทความนี้จะอธิบายตั้งแต่พื้นฐาน วิธีสร้าง Key บนแต่ละระบบปฏิบัติการ การจัดการ Key หลายคู่ ไปจนถึงการแก้ปัญหาที่พบบ่อย

ทำความเข้าใจ SSH Key Authentication

SSH Key Authentication ทำงานบนพื้นฐานของ Asymmetric Cryptography หรือการเข้ารหัสแบบไม่สมมาตร ซึ่งใช้คู่กุญแจสองชุดที่เกี่ยวข้องกันทางคณิตศาสตร์ ได้แก่ Public Key และ Private Key

Public Key คืออะไร

Public Key หรือ "กุญแจสาธารณะ" คือส่วนที่คุณสามารถแชร์ให้ใครก็ได้อย่างปลอดภัย Public Key จะถูกอัปโหลดไปเก็บบนเซิร์ฟเวอร์ในไฟล์ ~/.ssh/authorized_keys เมื่อคุณพยายามเชื่อมต่อ เซิร์ฟเวอร์จะส่ง Challenge ที่เข้ารหัสด้วย Public Key ของคุณกลับมา มีแค่ผู้ที่มี Private Key ที่ตรงกันเท่านั้นที่ถอดรหัส Challenge นั้นได้

Private Key คืออะไร

Private Key หรือ "กุญแจส่วนตัว" คือส่วนที่ต้องเก็บไว้กับตัวเองอย่างเคร่งครัด ไม่ควรส่งให้ใคร ไม่ควรอัปโหลดขึ้นเซิร์ฟเวอร์ และไม่ควรเก็บในที่ที่คนอื่นเข้าถึงได้ Private Key ไม่ถูกส่งผ่านเครือข่ายเลยในระหว่างการ Authentication ทำให้วิธีนี้ปลอดภัยจากการดักฟัง (Eavesdropping) และการโจมตีแบบ Brute-force

ทำไม SSH Key จึงปลอดภัยกว่า Password

Password สามารถถูก Brute-force ได้ถ้าสั้นหรือเดาง่าย และยังอาจรั่วไหลจาก Phishing หรือ Keylogger SSH Key ที่ดีจะมีความยาว 2,048–4,096 bits หรือใช้ Algorithm Ed25519 ซึ่งยากมากในการถอดรหัสแม้จะมีเวลานาน นอกจากนี้ยังสามารถตั้ง Passphrase ป้องกัน Private Key ชั้นที่สองได้อีกด้วย

สร้าง SSH Key Pair บนเครื่อง

เปิด Terminal แล้วรันคำสั่ง:

ssh-keygen -t rsa -b 4096 -C "[email protected]"

ระบบจะสร้างไฟล์ 2 ไฟล์: ~/.ssh/id_rsa (Private Key) และ ~/.ssh/id_rsa.pub (Public Key) เก็บ Private Key ไว้กับตัวเอง ห้ามเผยแพร่

วิธีสร้าง SSH Key บน Windows (PuTTYgen) และ macOS/Linux (ssh-keygen)

การสร้าง SSH Key แตกต่างกันเล็กน้อยตามระบบปฏิบัติการ แต่หลักการเหมือนกัน คือสร้างคู่กุญแจ แล้วเก็บ Private Key ไว้กับตัวและนำ Public Key ไปอัปโหลดเซิร์ฟเวอร์

สร้าง SSH Key บน macOS และ Linux ด้วย ssh-keygen

macOS และ Linux มีโปรแกรม ssh-keygen ติดตั้งมาให้แล้ว เปิด Terminal แล้วรันคำสั่ง:

ssh-keygen -t ed25519 -C "[email protected]"

โปรแกรมจะถามว่าจะบันทึกไฟล์ที่ไหน (กด Enter เพื่อใช้ค่า Default ~/.ssh/id_ed25519) และถามว่าต้องการตั้ง Passphrase หรือไม่ (แนะนำให้ตั้งเสมอ) เมื่อสร้างเสร็จจะได้ไฟล์ id_ed25519 (Private Key) และ id_ed25519.pub (Public Key) สำหรับผู้ที่ต้องการใช้ RSA format เพื่อความเข้ากันได้กับระบบเก่า ใช้คำสั่ง ssh-keygen -t rsa -b 4096 แทน

สร้าง SSH Key บน Windows ด้วย PuTTYgen

Windows สามารถใช้ ssh-keygen ได้ใน Command Prompt หรือ PowerShell ตั้งแต่ Windows 10 ขึ้นไป อย่างไรก็ตาม ผู้ใช้ที่ใช้ PuTTY สำหรับ SSH สามารถสร้าง Key ด้วย PuTTYgen ซึ่งติดมาพร้อม PuTTY:

  1. เปิดโปรแกรม PuTTYgen
  2. เลือก Key Type เป็น EdDSA หรือ RSA ขนาด 4096 bits
  3. คลิก Generate แล้วขยับเมาส์ในพื้นที่ว่างเพื่อสร้างความสุ่ม
  4. กรอก Passphrase ในช่อง Key passphrase เพื่อความปลอดภัยเพิ่มเติม
  5. คลิก Save private key บันทึกไฟล์ .ppk ไว้บนเครื่อง
  6. คัดลอกข้อความ Public Key จากช่องบนสุดของหน้าต่าง PuTTYgen นำไปวางใน DirectAdmin

การจัดการ SSH Keys หลายคู่สำหรับหลาย Server

เมื่อมีเซิร์ฟเวอร์หลายเครื่อง แนะนำให้สร้าง SSH Key คู่แยกสำหรับแต่ละเซิร์ฟเวอร์หรือแต่ละบัญชี เพื่อให้ง่ายต่อการ Revoke กรณีที่ Key ใดรั่วไหล โดยไม่กระทบ Server อื่น

สร้าง Key คู่ใหม่สำหรับแต่ละ Server

ตั้งชื่อ Key ให้บ่งบอกว่าใช้กับ Server อะไร เช่น:

ssh-keygen -t ed25519 -f ~/.ssh/id_asiagb -C "asiagb-hosting"

คำสั่งนี้สร้างไฟล์ ~/.ssh/id_asiagb (Private Key) และ ~/.ssh/id_asiagb.pub (Public Key) โดยเฉพาะสำหรับ Server นั้น

ตั้งค่า SSH Config File

เพื่อให้ SSH Client รู้ว่า Key ไหนใช้กับ Server ไหน สร้างหรือแก้ไขไฟล์ ~/.ssh/config เพิ่ม Entry ดังนี้:

Host myhosting
  HostName yourdomain.com
  User myusername
  IdentityFile ~/.ssh/id_asiagb

หลังจากนี้สามารถเชื่อมต่อได้ด้วยคำสั่งสั้นๆ ว่า ssh myhosting SSH จะเลือก Key ที่ถูกต้องให้อัตโนมัติ

วิธีเพิ่ม Public Key ใน DirectAdmin

  1. ล็อกอิน DirectAdmin แล้วไปที่ Advanced Features
  2. คลิก SSH Keys
  3. คลิก Add Key
  4. วาง Public Key (เนื้อหาของ id_rsa.pub) ในช่อง Key
  5. คลิก Add

ทดสอบการเชื่อมต่อ

หลังเพิ่ม Key แล้ว ทดสอบเชื่อมต่อด้วยคำสั่ง:

ssh -p 22 [email protected]

หากตั้งค่าถูกต้อง จะเชื่อมต่อได้โดยไม่ต้องกรอกรหัสผ่าน

ความปลอดภัย: ตั้ง Passphrase ให้กับ Private Key เสมอ เพื่อให้แม้มีคนขโมยไฟล์ Key ยังต้องรู้ Passphrase ก่อนใช้งานได้

ข้อปฏิบัติที่ดีในการดูแล SSH Keys

การมี SSH Key ไม่ได้หมายความว่าความปลอดภัยสมบูรณ์แล้ว การดูแลและจัดการ Key อย่างถูกต้องสม่ำเสมอเป็นสิ่งสำคัญไม่แพ้กัน

ตรวจสอบและลบ Key ที่ไม่ใช้

เข้าไปใน DirectAdmin SSH Keys แล้วดู Key ทั้งหมดที่มีอยู่ ลบ Key ที่ไม่ได้ใช้แล้ว เช่น Key จากคอมพิวเตอร์เครื่องเก่า Key ของพนักงานที่ลาออกไปแล้ว หรือ Key ที่สร้างทดสอบและไม่ต้องการอีกต่อไป แต่ละ Key ที่ยังอยู่ในระบบคือ Potential Entry Point หากใครนำ Private Key ที่ตรงกันไปใช้

ใช้ Passphrase กับ Private Key เสมอ

Passphrase เปรียบเสมือนรหัสผ่านที่ล็อค Private Key ไว้ แม้จะมีคนได้ไฟล์ Private Key ไป ถ้าไม่รู้ Passphrase ก็ไม่สามารถใช้งานได้ เลือก Passphrase ที่ยาวและจำง่ายสำหรับคุณแต่เดาได้ยาก เช่น วลีที่มีความหมายเฉพาะตัว

สำรอง Private Key อย่างปลอดภัย

Private Key ไม่ควรเก็บแค่ในเครื่องเดียว ถ้าเครื่องพังหรือสูญหายคุณจะเข้าเซิร์ฟเวอร์ไม่ได้ สำรอง Private Key ลง Encrypted Storage เช่น USB Drive ที่เข้ารหัส หรือ Password Manager ที่รองรับการเก็บไฟล์ ห้ามสำรองลง Cloud Storage ที่ไม่ได้เข้ารหัส

ต่ออายุ Key เป็นระยะ

ถึงแม้ SSH Key จะไม่มีวันหมดอายุ แต่แนวทางที่ดีคือสร้าง Key ใหม่ทุก 1–2 ปี แล้วอัปเดต Key บนเซิร์ฟเวอร์ทั้งหมด เพื่อลดความเสี่ยงจาก Key ที่อาจถูก Compromise โดยไม่รู้ตัว

การแก้ปัญหา SSH Key ใช้งานไม่ได้

ปัญหาที่พบบ่อยเมื่อเชื่อมต่อ SSH ด้วย Key คือได้รับข้อความ Permission denied (publickey) หรือเซิร์ฟเวอร์ยังขอ Password ทั้งที่เพิ่ม Key ไปแล้ว มีวิธีวินิจฉัยและแก้ไขดังนี้

Permission denied (publickey) — สาเหตุและแนวทางแก้ไข

ข้อความนี้หมายความว่าเซิร์ฟเวอร์ไม่ยอมรับ Key ของคุณ สาเหตุที่พบบ่อย ได้แก่:

Wrong Key Format — รูปแบบ Key ไม่รองรับ

ถ้าสร้าง Key ด้วย PuTTYgen และนำไฟล์ .ppk ไปใช้กับ OpenSSH โดยตรงจะไม่ทำงาน เพราะรูปแบบต่างกัน ต้องใช้ Public Key Text ที่แสดงในหน้าต่าง PuTTYgen เท่านั้น (ขึ้นต้นด้วย ssh-rsa หรือ ecdsa-sha2) ไม่ใช่ตัวไฟล์ .ppk

SSH Version ไม่รองรับ Algorithm

ถ้าสร้าง Key ด้วย Algorithm ใหม่อย่าง Ed25519 แต่เซิร์ฟเวอร์ใช้ OpenSSH เวอร์ชันเก่าอาจไม่รองรับ ในกรณีนี้ลองสร้าง Key แบบ RSA ขนาด 4096 bits แทน ซึ่งรองรับได้กว้างกว่า

ใช้ Verbose Mode วินิจฉัยปัญหา

เพิ่ม -v ต่อท้ายคำสั่ง SSH เพื่อดู Log โดยละเอียดว่า Authentication ล้มเหลวตรงขั้นตอนไหน:

ssh -v [email protected]

ค้นหาบรรทัดที่ขึ้นต้นด้วย debug1: Offering public key และ debug1: Server accepts key หรือ Authentications that can continue เพื่อดูว่าเซิร์ฟเวอร์ปฏิเสธ Key ของคุณตรงจุดไหน

ต้องการ Hosting รองรับ SSH?

AsiaGB Hosting รองรับ SSH Access พร้อม SSH Keys ทุกแพ็กเกจ สะดวกสำหรับ Developer

ดูแพ็กเกจ Hosting