การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์
ทำความเข้าใจ authorized_keys, กุญแจ Ed25519 เทียบกับ RSA และผลกระทบด้านความปลอดภัยของการส่งต่อเอเจนต์ SSH
การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์ เป็นบทเรียน Cryptology Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cryptology Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
รูปแบบไฟล์ authorized_keys
การยืนยันตัวตนด้วยกุญแจสาธารณะของ SSH อาศัยไฟล์ authorized_keys ซึ่งโดยทั่วไปอยู่ที่ ~/.ssh/authorized_keys บนเซิร์ฟเวอร์ แต่ละบรรทัดประกอบด้วยกุญแจสาธารณะในรูปแบบ: อัลกอริทึม base64-key ความคิดเห็น เซิร์ฟเวอร์จะตรวจสอบว่าไคลเอนต์สามารถพิสูจน์ว่าครอบครองกุญแจส่วนตัวที่ตรงกันได้หรือไม่ โดยการลงลายเซ็นบนคำท้าทาย
การสร้างกุญแจ SSH ด้วย ssh-keygen
คำสั่ง ssh-keygen ใช้สร้างคู่กุญแจสำหรับการยืนยันตัวตน การเรียกใช้ ssh-keygen -t ed25519 จะสร้างคู่กุญแจ Ed25519 สมัยใหม่ คุณสามารถระบุความคิดเห็นด้วย -C เพื่อใช้ระบุตัวตน เช่น อีเมลของคุณ เครื่องมือนี้จะบันทึกกุญแจส่วนตัว (id_ed25519) และกุญแจสาธารณะ (id_ed25519.pub) ไว้ใน ~/.ssh เป็นค่าเริ่มต้น
เปรียบเทียบประเภทกุญแจ: RSA, ECDSA, Ed25519
กุญแจ RSA ขนาด 4096 บิตเข้ากันได้กับระบบรุ่นเก่าเป็นอย่างดี แต่ลงลายเซ็นได้ช้ากว่า ECDSA บน NIST P-256 ทำงานได้เร็วกว่าและสร้างลายเซ็นที่มีขนาดเล็กกว่า แต่ผู้เชี่ยวชาญด้านการเข้ารหัสบางส่วนตั้งข้อสงสัยเกี่ยวกับการเลือกพารามิเตอร์เส้นโค้งของ NIST Ed25519 ซึ่งอาศัย Curve25519 เป็นแนวทางปฏิบัติที่ดีที่สุดในปัจจุบัน เพราะมีกุญแจและลายเซ็นขนาดเล็ก ทำงานเร็ว ไม่พบจุดอ่อนที่ทราบ และมีให้ใช้ในการนำ SSH สมัยใหม่ทั้งหมด
กุญแจส่วนตัวที่ป้องกันด้วยข้อความรหัสผ่าน
ไฟล์กุญแจส่วนตัวควรได้รับการปกป้องด้วยข้อความรหัสผ่าน ssh-keygen จะเข้ารหัสกุญแจส่วนตัวโดยใช้กุญแจที่สร้างจากข้อความรหัสผ่าน (bcrypt สำหรับกุญแจสมัยใหม่) ดังนั้นผู้โจมตีที่ขโมยไฟล์ไปจะไม่สามารถใช้กุญแจได้หากไม่มีข้อความรหัสผ่าน หากไม่มีข้อความรหัสผ่าน ผู้ที่เข้าถึงไฟล์ได้ก็สามารถยืนยันตัวตนเป็นคุณกับเซิร์ฟเวอร์ใด ๆ ที่เก็บกุญแจสาธารณะที่ตรงกัน
ssh-agent สำหรับจัดการกุญแจ
โปรแกรม ssh-agent จะเก็บกุญแจส่วนตัวที่ถอดรหัสแล้วไว้ในหน่วยความจำระหว่างเซสชันเข้าสู่ระบบ คุณโหลดกุญแจได้ด้วย ssh-add ~/.ssh/id_ed25519 ซึ่งจะขอข้อความรหัสผ่านเพียงครั้งเดียว การเชื่อมต่อ SSH ครั้งต่อ ๆ ไปจะขอให้เอเจนต์ลงลายเซ็นบนคำท้าทายโดยไม่ต้องป้อนข้อความรหัสผ่านซ้ำ จึงผสานความปลอดภัยเข้ากับความสะดวก
วิธีที่ ssh-agent ลงลายเซ็นบนคำท้าทาย
เมื่อเซิร์ฟเวอร์ SSH ส่งคำท้าทายสำหรับการยืนยันตัวตน ไคลเอนต์ SSH จะมอบหมายการลงลายเซ็นให้ ssh-agent ผ่านซ็อกเก็ต Unix เอเจนต์จะลงลายเซ็นทางการเข้ารหัสโดยใช้กุญแจส่วนตัวที่เก็บอยู่ในหน่วยความจำ แล้วส่งกลับเฉพาะลายเซ็นเท่านั้น ไบต์ของกุญแจส่วนตัวจะไม่ออกจากกระบวนการของเอเจนต์ แม้แต่ไปยังไคลเอนต์ SSH เอง
การส่งต่อเอเจนต์: ความสามารถและความเสี่ยง
การส่งต่อเอเจนต์ (ForwardAgent yes หรือ ssh -A) อนุญาตให้เซสชัน SSH ระยะไกลใช้เอเจนต์ภายในเครื่องของคุณเพื่อยืนยันตัวตนต่อไปยังเซิร์ฟเวอร์อื่น วิธีนี้มีประโยชน์สำหรับการเชื่อมต่อผ่านโฮสต์ตัวกลางโดยไม่ต้องคัดลอกกุญแจส่วนตัวไปยังโฮสต์ดังกล่าว อย่างไรก็ตาม หากโฮสต์ตัวกลางถูกยึดครอง ผู้ใช้ที่มีสิทธิ์สูงสุดบนโฮสต์นั้นอาจเข้าถึงซ็อกเก็ตของเอเจนต์และใช้ยืนยันตัวตนเป็นคุณกับเซิร์ฟเวอร์ใด ๆ ก็ได้
ProxyJump เทียบกับ ForwardAgent สำหรับโฮสต์ตัวกลาง
ProxyJump (ssh -J bastion target) เป็นทางเลือกที่ปลอดภัยกว่า ForwardAgent สำหรับการเข้าถึงโฮสต์ตัวกลาง โดยสร้างช่องสัญญาณ TCP ผ่านโฮสต์ตัวกลางโดยไม่เปิดเผยซ็อกเก็ตของเอเจนต์ที่นั่น เซิร์ฟเวอร์ปลายทางได้รับการเชื่อมต่อโดยตรงจากไคลเอนต์ภายในเครื่องของคุณ ส่วนโฮสต์ตัวกลางทำหน้าที่ส่งต่อไบต์ TCP ที่เข้ารหัสเท่านั้น และไม่มีความสามารถในการใช้ข้อมูลรับรองของคุณ
การยืนยันตัวตนด้วยใบรับรอง SSH
SSH รองรับการยืนยันตัวตนแบบใช้ใบรับรอง โดยหน่วยงานออกใบรับรอง (CA) จะลงลายเซ็นให้กับกุญแจสาธารณะของโฮสต์และผู้ใช้ แทนที่จะแจกจ่ายกุญแจสาธารณะรายบุคคลไปยังทุกเซิร์ฟเวอร์ คุณสามารถกำหนดค่าเซิร์ฟเวอร์ให้เชื่อถือ CA ของคุณได้ ใบรับรองผู้ใช้ที่มีลายเซ็นจะให้สิทธิ์เข้าถึงเซิร์ฟเวอร์ทั้งหมดที่เชื่อถือ CA นั้น โดยอาจฝังวันหมดอายุและข้อจำกัดเกี่ยวกับตัวตนที่ได้รับอนุญาตไว้ในใบรับรอง
ssh-keyscan สำหรับรวบรวมกุญแจจำนวนมาก
เครื่องมือ ssh-keyscan เชื่อมต่อกับโฮสต์หนึ่งรายการหรือหลายรายการและดึงกุญแจโฮสต์สาธารณะโดยไม่ต้องยืนยันตัวตน วิธีนี้มีประโยชน์สำหรับการเพิ่มข้อมูลลงในไฟล์ known_hosts โดยอัตโนมัติในสคริปต์นำระบบไปใช้งาน เอาต์พุตสามารถส่งต่อเข้าไฟล์ known_hosts ได้โดยตรง: ssh-keyscan -H example.com >> ~/.ssh/known_hosts
สรุปลำดับการยืนยันตัวตนด้วยกุญแจ
การยืนยันตัวตนด้วยกุญแจสาธารณะ: ไคลเอนต์ส่งกุญแจสาธารณะ เซิร์ฟเวอร์ตรวจสอบ authorized_keys เซิร์ฟเวอร์ส่งคำท้าทายที่ลงลายเซ็นด้วยตัวระบุเซสชัน ไคลเอนต์ (ผ่านเอเจนต์) ลงลายเซ็นด้วยกุญแจส่วนตัว และเซิร์ฟเวอร์ตรวจสอบลายเซ็นโดยใช้กุญแจสาธารณะที่จัดเก็บไว้ หากถูกต้อง การยืนยันตัวตนจะสำเร็จโดยไม่ต้องส่งข้อมูลรับรองลับใด ๆ
การเลือกประเภทกุญแจ SSH
ประเภทกุญแจ SSH ใดเป็นแนวทางปฏิบัติที่ดีที่สุดในปัจจุบันสำหรับการนำระบบใหม่ไปใช้งาน เนื่องจากมีความเร็วสูง ขนาดกุญแจเล็ก และมีคุณสมบัติด้านความปลอดภัยที่แข็งแกร่ง
ทบทวนการยืนยันตัวตนด้วยกุญแจสาธารณะ
ประเด็นสำคัญ: จัดเก็บกุญแจสาธารณะไว้ใน authorized_keys ปกป้องกุญแจส่วนตัวด้วยข้อความรหัสผ่าน ใช้ ssh-agent เพื่อเก็บกุญแจที่ถอดรหัสแล้วไว้ในหน่วยความจำ เลือกใช้กุญแจประเภท Ed25519 ใช้ ProxyJump แทน ForwardAgent สำหรับการเข้าถึงโฮสต์ตัวกลางเพื่อหลีกเลี่ยงการเปิดเผยซ็อกเก็ตของเอเจนต์ และพิจารณาใช้ใบรับรอง SSH เพื่อจัดการสิทธิ์การเข้าถึงในระดับที่ขยายได้
เรียนรู้ Cryptology Academy ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 67
- บทเรียน
- 261
คำถามที่พบบ่อย
บทเรียน “การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cryptology Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cryptology Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์”
ทำความเข้าใจ authorized_keys, กุญแจ Ed25519 เทียบกับ RSA และผลกระทบด้านความปลอดภัยของการส่งต่อเอเจนต์ SSH คุณปฏิบัติ Cryptology Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cryptology Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cryptology Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cryptology Academy นี้ได้ไหม
ได้ บทเรียน Cryptology Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การจับมือ SSH และการยืนยันตัวตนด้วยกุญแจโฮสต์
- การยืนยันตัวตนด้วยกุญแจสาธารณะและการส่งต่อเอเจนต์
- เทคนิคการสร้างอุโมงค์ SSH และการส่งต่อพอร์ต
- การเสริมความแข็งแกร่ง SSH และแนวทางปฏิบัติที่ดีด้านการตรวจสอบ