สองเครื่องอยู่ในรูปภาพสำหรับปัญหาของฉัน:
- เซิร์ฟเวอร์: ใช้ Ubuntu Server 20.04.3 LTS, ใช้เซิร์ฟเวอร์ ssh
- ลูกค้า: เรียกใช้ Ubuntu Desktop 20.04.3 LTS เรียกใช้ไคลเอนต์ ssh
ฉันคาดว่าจะใช้คู่กุญแจ ED25519 ที่สร้างขึ้น คีย์จะถูกเก็บไว้ดังต่อไปนี้:
- id_ed25519.pub: แนบใน ~/.ssh/authorized_keys บน "เซิร์ฟเวอร์"
- id_ed25519: เก็บไว้ใน ~/.ssh บน "ไคลเอนต์"
การกำหนดค่าบนเซิร์ฟเวอร์ใน /etc/ssh/sshd.config:
- PubkeyAuthentication ใช่
- AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
- เลขที่ยืนยันรหัสผ่าน
การกำหนดค่าบนไคลเอ็นต์:
- id_ed25519 มีให้บริการผ่านพวงกุญแจ
(ดำเนินการ ssh-add สำหรับ ssh-agent ขอรหัสผ่านอย่างถูกต้อง)
ตอนนี้สิ่งที่ทำให้ฉันปวดหัว:
ขั้นตอนที่ 1: ฉันเชื่อมต่อจากไคลเอนต์ไปยังเซิร์ฟเวอร์ เมื่อฉันเข้าถึงเป็นครั้งแรก (ว่าง ~/.ssh/known_hosts บนไคลเอนต์) ฉันได้รับ:
ลายนิ้วมือของคีย์ ECDSA คือ SHA256: [DefaultKeyFingerprint] คุณแน่ใจหรือไม่ว่าต้องการเชื่อมต่อต่อ
[DefaultKeyFingerprint] เป็นตัวยึดสำหรับลายนิ้วมือที่แสดง ปรากฎว่าไม่ใช่ลายนิ้วมือที่ฉันคาดไว้ ความคาดหวังของฉันคือ: id_ed25519.pub ถูกใช้โดยเซิร์ฟเวอร์เพื่อรับลายนิ้วมือ สิ่งนี้จะนำไปสู่ลายนิ้วมืออื่น (ตรวจสอบผ่าน "ssh-keygen -l -f") เรียกสิ่งนี้ว่า [ลายนิ้วมือที่คาดหวัง]
ฉันพยายามเข้าใจว่า [DefaultKeyFingerprint] มาจากไหน ผลลัพธ์:
เหมาะกับคีย์เริ่มต้น ssh_host_ecdsa_key.pub ที่สร้างโดย sshd ใน /etc/ssh/
ขั้นตอนที่ 2: หลังจากยอมรับคำเตือนข้างต้นแล้ว ฉันสามารถเชื่อมต่อได้สำเร็จ
ฉันต้องการทราบว่ามีการใช้คีย์สาธารณะที่อยู่เบื้องหลัง [DefaultKeyFingerprint] หรือ [ExpectedFingerprint] หรือไม่ ข้อบ่งชี้สองประการว่ามีการใช้ [ลายนิ้วมือที่คาดหวัง]:
- การระบุคีย์ส่วนตัวที่อยู่เบื้องหลัง [DefaultKeyFingerprint] เมื่อเรียกใช้งาน "ssh" บนไคลเอ็นต์นั้น "เซิร์ฟเวอร์" ไม่ยอมรับ แม้ว่าไฟล์คีย์ส่วนตัวจะถูกระบุโดยใช้ตัวเลือก -i ข้อผิดพลาดคือ:
ปฏิเสธการอนุญาต (คีย์สาธารณะ)
สิ่งนี้เหมาะสมกับความคาดหวังของฉันเนื่องจากฉันอนุญาตฝั่งเซิร์ฟเวอร์ใน ~/.ssh/authorized_keys เฉพาะคีย์สาธารณะที่เหมาะกับ [ExpectedFingerprint]
- เมื่อฉันทำงานบน "เซิร์ฟเวอร์":
สถานะ systemctl ssh
หลังจากเข้าสู่ระบบสำเร็จฉันได้รับผลลัพธ์ต่อไปนี้:
วันที่ 22 10:57:42 [my_machine] sshd[3255]: คีย์ที่ยอมรับ ED25519 SHA256:[ExpectedFingerprint] พบได้ที่ ~/.ssh/authorized_keys:1
วันที่ 22 10:57:42 [my_machine] sshd[3255]: ยอมรับคีย์สาธารณะสำหรับ [ผู้ใช้] จากพอร์ต 192.168.178.35 50048 ssh2: ED25519 SHA256:[ลายนิ้วมือที่คาดหวัง]
วันที่ 22 10:57:42 [my_machine] sshd[3255]: pam_unix(sshd:session): เซสชันเปิดสำหรับผู้ใช้ [ผู้ใช้] โดย (uid=0)
คำถามของฉัน:
- คุณสามารถยืนยันข้อโต้แย้งของฉันข้างต้นได้หรือไม่ว่ามีการใช้ [ExpectedFingerprint] จริง
- เหตุใด "เซิร์ฟเวอร์" จึงแสดงเป็นลายนิ้วมือ [DefaultKeyFingerprint] ไม่ใช่ [ExpectedFingerprint] และฉันจะทำให้ "เซิร์ฟเวอร์" แสดง [ExpectedFingerprint] ได้อย่างไร
ข้อสังเกต - ไม่รู้ว่าสำคัญไหม
เมื่อฉันสร้างคู่กุญแจที่นำไปสู่ [ExpectedFingerprint] ฉันระบุเครื่องหมายดอกจันในชื่อโดเมน *.mydomain.com ผลลัพธ์ของ ssh-keygen -l -f สำหรับคีย์สาธารณะทั้งสอง:
256 SHA256:[ลายนิ้วมือที่คาดหวัง] *.mydomain.com (ED25519)
256 SHA256:[DefaultKeyFingerprint] root@mymachine (ECDSA)
ขอขอบคุณล่วงหน้าสำหรับความคิดของคุณ