- Cloudflare เปิดซอร์ส OPKSSH (OpenPubkey SSH)
- OPKSSH ช่วยให้สร้างและใช้งานคีย์ SSH ได้อัตโนมัติผ่านการล็อกอิน SSO ที่ใช้ OpenID Connect
- ผู้ใช้ไม่จำเป็นต้องจัดการคีย์สาธารณะ/คีย์ส่วนตัวของ SSH ด้วยตนเองหรือแจกจ่ายไปยังเซิร์ฟเวอร์อีกต่อไป
- สามารถนำแนวทางการเข้าถึงแบบอิงตัวตนมาใช้กับการยืนยันตัวตน SSH ได้โดยไม่ต้องแก้ไขโปรโตคอล SSH
คำอธิบายพื้นฐานเกี่ยวกับ SSO และ OpenID Connect
- SSO (Single Sign-On) เป็นวิธีการยืนยันตัวตนที่ช่วยให้ผู้ใช้ล็อกอินครั้งเดียวแล้วเข้าถึงได้หลายระบบ
- OpenID Connect เป็นโปรโตคอลที่ใช้กับ SSO เป็นหลัก โดยออก ID token ที่มีข้อมูลผู้ใช้
- ID token มีข้อมูลอย่างอีเมลของผู้ใช้ แต่ไม่มี public key รวมอยู่ด้วย → จึงยังไม่สามารถนำไปใช้กับโปรโตคอลความปลอดภัยอย่าง SSH ได้โดยตรง
แนะนำ OpenPubkey
- OpenPubkey ใส่ public key ของผู้ใช้เข้าไปใน ID token เพื่อสร้างเป็น PK Token
- ทำให้สามารถยืนยันได้ว่า “Google รับรองว่าผู้ใช้ alice@example.com กำลังใช้ public key 0x123”
- สามารถนำไปใช้กับโปรโตคอล OpenID Connect เดิมได้โดยไม่ต้องมีการเปลี่ยนแปลง
บทบาทและข้อดีของ OPKSSH
- OPKSSH ผสาน OpenPubkey เข้ากับ SSH เพื่อสร้างคีย์ SSH แบบใช้ครั้งเดียวผ่านการล็อกอิน SSO
- ทำงานได้โดยไม่ต้องเปลี่ยนแปลงโปรโตคอล SSH เดิม และใช้งานได้ด้วยการเพิ่มเพียงสองบรรทัดในไฟล์ตั้งค่า
-
เพิ่มความปลอดภัย
- ใช้คีย์ SSH แบบใช้ครั้งเดียวแทนคีย์ระยะยาว → ลดความเสียหายเมื่อคีย์รั่วไหลและสามารถจำกัดอายุคีย์ได้
- หมดอายุภายใน 24 ชั่วโมงโดยค่าเริ่มต้น และสามารถเปลี่ยนค่าได้ผ่านการตั้งค่า
-
เพิ่มความสะดวกให้ผู้ใช้
- เพียงรันคำสั่ง
opkssh login ก็สามารถสร้างคีย์ SSH และล็อกอินได้
- ไม่จำเป็นต้องคัดลอกคีย์ส่วนตัว SSH ไปยังหลายเครื่อง
-
เพิ่มการมองเห็นในการจัดการ
- ใช้อีเมลแทนการเข้าถึงแบบอิงคีย์ → ติดตามได้ชัดเจนว่าเป็นผู้ใช้คนใด
- เพียงเพิ่มอีเมลอย่าง
bob@example.com ลงในไฟล์อนุญาตการเข้าถึง ก็สามารถให้สิทธิ์เข้าใช้งานได้ทันที
วิธีการทำงานของ OPKSSH
- เมื่อผู้ใช้รัน
opkssh login:
- สร้างคู่คีย์ SSH สาธารณะ/ส่วนตัวชั่วคราว
- ล็อกอินผ่านเบราว์เซอร์ไปยัง OpenID Provider (เช่น Google)
- หากสำเร็จ จะสร้าง PK Token ที่มี public key และตัวตนของผู้ใช้ผ่านโปรโตคอล OpenPubkey
- บันทึกไฟล์ public key ที่มี PK Token รวมอยู่ และไฟล์คีย์ส่วนตัวไว้ในไดเรกทอรี
.ssh
- เมื่อเชื่อมต่อ SSH:
- SSH client ส่ง public key ที่มี PK Token รวมอยู่ไปยัง SSH server
- เซิร์ฟเวอร์ตรวจสอบความถูกต้องของ public key ผ่าน OpenPubkey verifier ที่ตั้งค่าไว้ด้วย
AuthorizedKeysCommand
- หาก PK Token ถูกต้องและอีเมลอยู่ในรายการอนุญาตการเข้าถึง ก็จะอนุมัติการเชื่อมต่อ
การแก้ปัญหาทางเทคนิค
- การส่ง PK Token: ใช้ฟิลด์ส่วนขยายของใบรับรอง SSH เพื่อใส่ PK Token ลงใน public key ของ SSH
- การตรวจสอบความถูกต้องบนเซิร์ฟเวอร์: ใช้
AuthorizedKeysCommand เพื่อมอบหมายการตรวจสอบความถูกต้องของ public key ให้กับโปรแกรมแบบกำหนดเอง (OpenPubkey verifier)
- การตรวจสอบความสอดคล้องของ public key: ยืนยันว่า public key ที่ปกป้องเซสชัน SSH ตรงกับคีย์ภายใน PK Token
การเปิดซอร์สและความหมายของมัน
- OPKSSH ถูกเผยแพร่บน GitHub ภายใต้ไลเซนส์ Apache 2.0
- ก่อนหน้านี้ยังอยู่ในระดับต้นแบบ แต่ตอนนี้มีรีลีสที่เสถียรพร้อมฟังก์ชัน SSH ที่สมบูรณ์แล้ว
- Cloudflare จะไม่ดูแลหรือรับประกันโครงการนี้ แต่ได้บริจาคโค้ดให้กับชุมชน OpenPubkey
การปรับปรุงหลัก
- เพิ่มฟังก์ชัน SSH ที่พร้อมใช้งานจริง
- มีสคริปต์ติดตั้งอัตโนมัติให้
- รวมเครื่องมือคอนฟิกที่ปรับปรุงแล้ว
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ssh-keygenมาตรฐาน จึงเป็นประโยชน์ในมุมมองของผู้ดูแลระบบ