GitHub/GitLab Access Token vs SSH Key: เลือกวิธี Authentication ที่ปลอดภัย

การเลือกวิธีการยืนยันตัวตนกับ GitHub หรือ GitLab เป็นหนึ่งในตัดสินใจสำคัญสำหรับนักพัฒนา มีสองวิธีหลักที่นิยม: Access Token และ SSH Key บทความนี้จะเปรียบเทียบความแตกต่างและช่วยให้คุณเลือกวิธีที่เหมาะสมที่สุดสำหรับงานของคุณ

Access Token คืออะไร

Access Token เป็นสตริงข้อความยาวที่ GitHub หรือ GitLab สร้างขึ้นเพื่อใช้ยืนยันตัวตนแทนรหัสผ่าน Token นี้ให้สิทธิ์ในการเข้าถึง Repository และ API ผ่านการเชื่อมต่อ HTTP/HTTPS

ข้อดีของ Access Token:

  • ทำให้ใช้งานง่าย – สร้างและใช้งานได้อย่างรวดเร็ว ไม่ต้องสร้าง Key Pair
  • ง่ายต่อการปรับปรุง – สามารถ Rotate หรือ Regenerate ได้ง่ายผ่าน Web Interface
  • ควบคุมสิทธิ์แบบละเอียด – สามารถกำหนด Fine-grained Scopes และระยะเวลาหมดอายุ (Expiration)
  • ใช้งานกับ CI/CD ได้ดี – เหมาะสำหรับ Automated Scripts และ Third-party Applications
  • รองรับหลายประเภท – รองรับทั้ง Personal Access Token (PAT) และ OAuth Token

SSH Key คืออะไร

SSH Key เป็นคู่กุญแจสำหรับเข้ารหัส (Cryptographic Key Pair) ที่ประกอบด้วย Public Key และ Private Key ใช้สำหรับยืนยันตัวตนโดยไม่ต้องส่งรหัสผ่านข่าวสาร

ข้อดีของ SSH Key:

  • ปลอดภัยสูงกว่า – ใช้ SSH Protocol และการเข้ารหัสแบบสองกุญแจแทนการส่งรหัสผ่าน
  • ไม่ต้องเก็บรหัสผ่านข่าวสาร – เก็บเฉพาะ Private Key บนเครื่องของคุณ
  • ใช้งานได้นานกว่า – SSH Key ไม่มีระยะเวลาหมดอายุโดยค่าเริ่มต้น
  • เหมาะสำหรับ Automation – ใช้ได้ดีสำหรับ Server-to-Server Authentication และ Deployment Scripts
  • ไม่มีข้อจำกัด Port – ใช้ SSH Protocol (Port 22) ซึ่งอาจผ่านไฟร์วอลล์บางแห่ง

เปรียบเทียบ Access Token กับ SSH Key

คุณลักษณะ Access Token SSH Key
ความยุ่งยาก ง่าย เพียงสร้างจาก Web Interface ซับซ้อนกว่า ต้องสร้าง Key Pair
การควบคุมสิทธิ์ สามารถกำหนดเพื่อให้ละเอียด มักให้สิทธิ์เต็มที่สำหรับ Repository
การยกเลิก (Revoke) ง่าย ทำได้ผ่าน Web Interface ทันที มีความยุ่งยาดเพราะต้องลบจากเซิร์ฟเวอร์
โปรโตคอล HTTP/HTTPS เท่านั้น SSH Protocol (Port 22)
การใช้งานบนหลาย Device ใช้ได้ง่ายบนเครื่องต่างๆ แต่ละเครื่องต้องมี Private Key ของตัวเอง
ระยะเวลาหมดอายุ สามารถกำหนดให้มีการหมดอายุได้ ไม่มีการหมดอายุโดยค่าเริ่มต้น

สำหรับ GitHub:

  • เข้าไป Settings ในบัญชี GitHub ของคุณ
  • คลิก Developer settings
  • คลิก Personal access tokens
  • คลิก Generate new token
  • ตั้งชื่อ Token และเลือก Scopes ที่ต้องการ
  • กำหนดวันหมดอายุ (Expiration)
  • คลิก Generate token และคัดลอก Token ไว้

สำหรับ GitLab:

  • เข้าไป Settings ในบัญชี GitLab ของคุณ
  • คลิก Access Tokens
  • คลิก Create personal access token
  • ตั้งชื่อและเลือก Scopes
  • กำหนดวันหมดอายุ
  • คลิก Create personal access token

1. สร้าง SSH Key Pair:

# สร้าง Ed25519 SSH Key (แนะนำ)
ssh-keygen -t ed25519 -C "[email protected]"

# หรือใช้ RSA Key (ความเข้ากันได้ดีกว่า)
ssh-keygen -t rsa -b 4096 -C "[email protected]"

ระบบจะถามที่เก็บ Key และ Passphrase ให้กด Enter เพื่อใช้ค่าเริ่มต้นหรือกำหนดเอง

2. เพิ่ม Public Key ไปยัง GitHub/GitLab:

# สำหรับ GitHub
1. เข้า GitHub Settings
2. คลิก SSH and GPG keys
3. คลิก New SSH key
4. Paste Public Key (ที่ไฟล์ ~/.ssh/id_ed25519.pub)
5. คลิก Add SSH key

# สำหรับ GitLab
1. เข้า GitLab Settings
2. คลิก SSH Keys
3. Paste Public Key
4. คลิก Add key

3. ทดสอบการเชื่อมต่อ SSH:

# ทดสอบเชื่อมต่อ GitHub
ssh -T [email protected]
# ควรเห็นข้อความ: Hi [username]! You've successfully authenticated...

# ทดสอบเชื่อมต่อ GitLab
ssh -T [email protected]

ใช้งาน Access Token กับ Git

# Clone Repository ด้วย HTTPS (Access Token)
git clone https://github.com/username/repository.git
# ระบบจะถามชื่อผู้ใช้และรหัสผ่าน
# Username: your_username
# Password: your_personal_access_token

# หรือใส่ Token ในการเชื่อมต่อ
git clone https://[email protected]/username/repository.git

ใช้งาน SSH Key กับ Git

# Clone Repository ด้วย SSH
git clone [email protected]:username/repository.git
# ระบบจะใช้ Private Key สำหรับการยืนยันตัวตนโดยอัตโนมัติ

# ชั้นแรก ต้องเพิ่ม SSH Key ไปยัง SSH Agent
ssh-add ~/.ssh/id_ed25519

เลือก Access Token เมื่อ:

  • ใช้งานใน CI/CD Pipelines เช่น GitHub Actions, GitLab CI ที่ต้องเก็บ Credentials ในตัวแปรสภาพแวดล้อม (Environment Variables)
  • ต้องการ ควบคุมสิทธิ์แบบละเอียด โดยกำหนดเฉพาะสิ่งที่แอปพลิเคชันต้องการ
  • ทำงานกับ Third-party Applications เช่น GitHub CLI หรือเครื่องมือ Integrations
  • ต้องการ ความสะดวกสบาย ในการสร้างและลบอย่างรวดเร็ว
  • ใช้งาน API Calls จากโปรแกรมประยุกต์

เลือก SSH Key เมื่อ:

  • ต้องการ ความปลอดภัยสูงสุด สำหรับการทำงานในเครื่องส่วนตัว (Local Development)
  • ทำงาน Server-to-Server Authentication เช่น Deployment Scripts บน VPS
  • ต้องการ ไม่เคลื่อนไหว โดยไม่ต้องกำหนดระยะเวลาหมดอายุ
  • ใช้งาน Enterprise Deployments ที่มีความต้องการด้านความปลอดภัยสูง
  • ทำงานบน Multiple Servers ที่ต้อง Centralized Key Management

Best Practices สำหรับการเลือก Authentication

  • ใช้ SSH Key สำหรับ Local Development – เป็นวิธีที่ปลอดภัยและเป็นมาตรฐาน
  • ป้องกัน Private Key – ไม่ควรเชื่อ Private Key ลง Version Control หรือแชร์ออนไลน์
  • ใช้ Passphrase สำหรับ SSH Key – เพิ่มชั้นความปลอดภัยพิเศษ
  • ใช้ SSH Agent – สำหรับการใช้งานสะดวก โดยไม่ต้องพิมพ์ Passphrase ทุกครั้ง
  • กำหนด Expiration สำหรับ Access Token – ลดความเสี่ยงจากการรั่วไหล
  • Rotate Credentials เป็นประจำ – สร้าง Token หรือ Key ใหม่อย่างน้อยทุก 90 วัน
  • ตรวจสอบและลบ Credentials ที่ไม่ใช้ – ลบ Token หรือ SSH Key เก่าที่ไม่จำเป็น
  • ใช้ Fine-grained Scopes – ให้สิทธิ์เพียงสิ่งที่จำเป็นเท่านั้น
  • สำหรับ Deployment Scripts บน VPS ควรใช้ SSH Key เพราะความปลอดภัยและเสถียรภาพ
  • สำหรับ CI/CD Pipeline ที่เรียกใช้ API ของ GitHub/GitLab ให้ใช้ Personal Access Token และเก็บไว้ใน Environment Variables
  • ควร Rotate SSH Keys และ Tokens เป็นประจำ โดยเฉพาะในสภาพแวดล้อม Production
  • ใช้ Passphrase สำหรับ SSH Key บนเซิร์ฟเวอร์เพื่อป้องกันการใช้ Brute Force

สรุป

การเลือกระหว่าง Access Token และ SSH Key ขึ้นอยู่กับความต้องการของคุณ:

  • SSH Key เป็นทางเลือกที่ดีสำหรับการพัฒนาในเครื่องส่วนตัว (Local Development) และ Deployment Scripts เนื่องจากมีความปลอดภัยสูง
  • Access Token เหมาะสมสำหรับ CI/CD Pipelines และการใช้งาน API เนื่องจากสามารถควบคุมสิทธิ์ได้ละเอียด
  • Best Practice คือการใช้ SSH Key สำหรับ Local Development และ Server-to-Server Authentication พร้อมกับการ Rotate Keys เป็นประจำ
  • หากใช้งาน ผู้ให้บริการโฮสติ้ง Cloud Hosting หรือ Cloud VPS ให้จำไว้ว่าการเลือกวิธี Authentication ที่ปลอดภัยเป็นส่วนหนึ่งของการบริหารความเสี่ยง (Risk Management)