การเลือกวิธีการยืนยันตัวตนกับ 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)
