Category Archive SSH

Byphunsanit

SSH: login with passphrase

การ login server โดย passphrase ตอนแรกก็เข้าใจว่าเป็นอีกคำของ password แต่จริง ๆ แล้วมันกลับต่างกันในรายละเอียด ที่ passphrase ทำให้ปลอดภัยกว่า เพราะเปลี่ยน password เป็น 2 ชั้น (Two-Factor Authentication) หรือ 2fa เหมือนเหมือนตอนที่เรา login email ตอนนี้ ต้องใช้ sms ยืนยันอีกครั้งแบบ การโอนเงิน

1. หลักการ “มี” และ “รู้” (Something you Have & Know)

  • Password ธรรมดา:
    • ความปลอดภัยขึ้นอยู่กับสิ่งที่คุณ “รู้” (ตัวรหัสผ่าน) เพียงอย่างเดียว
    • ถ้าใครแอบดูคุณพิมพ์ หรือเดารหัสได้ หรือ Server ฝั่งนู้นทำรหัสหลุด -> จบเห่ครับ เขาเข้าได้เลย
  • SSH Key + Passphrase:
    • ต้องมีสิ่งที่คุณ “มี” (ไฟล์ Private Key ในเครื่อง Mac ของคุณ)
    • บวกกับ สิ่งที่คุณ “รู้” (Passphrase เพื่อไขไฟล์นั้น)
    • ความเจ๋ง: ถ้า Hacker ขโมยไฟล์ Key คุณไป (copy ไฟล์ไปได้) เขาก็เอาไปใช้ไม่ได้เพราะไม่รู้ Passphrase หรือถ้าเขารู้ Passphrase แต่ไม่มีไฟล์ Key เขาก็เข้าไม่ได้เช่นกัน ต้องมีครบ 2 อย่างเท่านั้น

2. Passphrase ไม่เคยถูกส่งออกจากเครื่อง (Local Decryption)

  • Password ธรรมดา: เวลาคุณพิมพ์ รหัสจะถูกส่งวิ่งผ่านอินเทอร์เน็ต (แม้จะเข้ารหัสแต่ก็ต้องส่งไป) เพื่อไปเช็คกับ Server ปลายทาง
  • Passphrase: คุณพิมพ์เพื่อปลดล็อกกุญแจในเครื่อง Mac ของคุณเท่านั้น Passphrase นี้ไม่เคยถูกส่งออกไปในอินเทอร์เน็ตเลย Server ปลายทางไม่รู้ด้วยซ้ำว่า Passphrase คุณคืออะไร Server แค่ตรวจสอบทางคณิตศาสตร์ว่ากุญแจดอกนี้ถูกต้องไหม

3. ป้องกันการสุ่มเดา (Brute Force Proof)

  • Password ธรรมดา: Bot สามารถยิงรหัสมาเดาที่ Server คุณได้เป็นล้านครั้ง (admin/1234, root/password) ถ้าฟลุ๊กถูกก็เข้าได้
  • SSH Key: ถ้าคุณปิดระบบ Password Login ที่ Server (ซึ่งควรทำหลังจาก Key ใช้ได้แล้ว) Bot จะไม่สามารถเดาอะไรได้เลย เพราะ Server จะปฏิเสธทันทีถ้าไม่มี Key “ประตูบ้านจะเหมือนถูกก่ออิฐปิดตายสำหรับคนที่ไม่มีกุญแจ”

เปรียบเทียบง่ายๆ เหมือนตู้ ATM

  • Password: เหมือนคุณเดินไปธนาคารแล้วบอกพนักงานว่า “รหัสลับคือ 1234 ขอเบิกเงินหน่อย” (ใครได้ยินก็จบ)
  • SSH Key + Passphrase: เหมือน บัตร ATM (Key) + รหัส PIN (Passphrase) คุณต้องเสียบบัตรและกดรหัสที่ตู้ ขาดอย่างใดอย่างหนึ่งเบิกเงินไม่ได้

การสร้าง passphrase

  1. สร้าง Key ใหม่ หรือแทนที่ของเดิม และตั้ง Passphrase โดยคำสั่ง
    1. ssh-keygen -t ed25519 -f ~/.ssh/{key name} -C "{comment}"
      เช่น
      ssh-keygen -t ed25519 -f ~/.ssh/digitalocean_vps -C "root_key"
    2. จากนั้นจะมีข้อความ
      Generating public/private ed25519 key pair.
      Enter passphrase for “/Users/phunsanit/.ssh/digitalocean_vps” (empty for no passphrase):
      • ส่วนนี้ให้เราใส่ข้อความที่เหมือน password ที่เรารู้คนเดียวลงไป ทางที่ดีคือ สุ่ม มาซัก 100 ตัวอักษร อย่าลืม save ไว้ด้วย
      • ถ้า enter ไปเฉย ๆ ก็จะเหมือนไม่มี password ใน login
    3. The key’s randomart image is:
      แปลว่าสร้าง key เสร็จแล้วจะได้ 2 ไฟล์ใน ~/.ssh (ถ้าใช้ mac) คือ
      • digitalocean_vps ไฟล์นี้เก็บไว้กับตัวเอง ไม่ให้ใครเห็น
      • digitalocean_vps.pub ไฟล์นี้จะส่งไปที่ server
  2. ส่งแม่กุญแจใหม่ไปที่ Server
    1. ssh-copy-id -i ~/.ssh/{key name}.pub -p {port number} {user name}@{server ip}
      เช่น
      ssh-copy-id -i ~/.ssh/digitalocean_vps.pub -p 59019 [email protected]
    2. ในครั้งแรก server จะถาม password ของ user ที่ ssh-copy-id ไป ก็ให้ใส่ รหัสผ่านให้ถูกต้อง
  3. ทดสอบโดย SSH ไป
    ssh/{key name}.pub -p {port number} {user name}
    เช่น
    ssh/digitalocean_vps.pub -p 59019 [email protected].

    เท่านี้เราก็สามารถที่จะ login เข้า server ได้อย่างสบายใจว่า ถึงใครจะเห็น passphrase เรา ก็ login ไม่ได้ ถ้าเครื่องของเค้าไม่มี SSH Key

อ่านเพิ่มเติม