ลายนิ้วมือเซิร์ฟเวอร์ SSH สร้าง / จัดเก็บอยู่ที่ไหน


44

ผมติดตั้ง openssh ssh-keygenเซิร์ฟเวอร์และสร้างความสำคัญกับ ssh -L 8080:www.nytimes.com:80 127.0.0.1จากนั้นผมก็พยายามที่จะทดสอบได้โดยใช้การส่งต่อพอร์ตท้องถิ่นโดยการทำ ssh-keygen -lแต่ลายนิ้วมือที่สำคัญที่คำสั่งนี้ให้ไม่ได้เป็นกุญแจที่ฉันได้รับเมื่อฉันทำ แม้ว่าผมจะลบไดเรกทอรี .ssh ssh-keygenของฉันฉันยังคงได้รับลายนิ้วมือเดียวซึ่งไม่ได้เป็นหนึ่งที่ผมสร้างขึ้นด้วย มีคีย์อื่นในระบบของฉันหรือไม่ กุญแจนี้อยู่ที่ไหน ฉันจะเลือกคีย์นี้สำหรับใช้โดย openssh-server ได้อย่างไร

คำตอบ:


58

เมื่อคุณสร้างเซสชัน SSH จะมีคู่คีย์ที่แตกต่างกันสองคู่ (ที่มีลายนิ้วมือสำหรับแต่ละคู่) เข้ามาเกี่ยวข้อง ~/.sshหนึ่งคือกุญแจสำคัญของผู้ใช้ที่ถูกเก็บไว้ใน บางครั้งข้อมูลประจำตัวของคีย์ SSH ของผู้ใช้จะใช้เป็นข้อมูลรับรองเพื่อเข้าสู่คอมพิวเตอร์เครื่องอื่น (หากคุณตั้งค่าการเข้าสู่ระบบด้วยคีย์)

อีกอันคือกุญแจของเซิร์ฟเวอร์ SSH นี่คือกุญแจที่คุณเห็นลายนิ้วมือเมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์อื่นเป็นครั้งแรก รหัสประจำตัวของคีย์นี้ใช้เพื่อให้แน่ใจว่าคุณกำลังเข้าสู่เซิร์ฟเวอร์ SSH ที่คุณต้องการ นี่เป็นสิ่งสำคัญหากคุณใช้รหัสผ่านเพราะคุณไม่ต้องการลองลงชื่อเข้าใช้เครื่องโจมตีโดยไม่ตั้งใจ: ผู้โจมตีจะได้รับรหัสผ่านของคุณเมื่อคุณพิมพ์รหัสผ่านจากนั้นผู้โจมตีสามารถเข้าสู่เครื่องที่คุณคิดว่าคุณกำลังเข้าสู่ระบบ ไป! (นี้เป็นที่รู้จักในฐานะ"คนในการโจมตีกลาง" ) ปุ่มที่ผู้ใช้เซิร์ฟเวอร์ SSH เพื่อระบุตัวเองเมื่อคุณเข้าสู่ระบบมันจะอยู่ในและมักจะตั้งชื่อสิ่งที่ต้องการ/etc/ssh/ssh_host_rsa_key

คุณสามารถเปลี่ยนตำแหน่งที่เซิร์ฟเวอร์ SSH ค้นหาคีย์ในไฟล์ด้วยการตั้งค่า/etc/ssh/sshd_configHostKey /path/to/host/key

โดยค่าเริ่มต้นจะสร้างที่สำคัญสำหรับผู้ใช้ปัจจุบันซึ่งโดยปกติจะถูกเก็บไว้ในssh-keygen ~/.sshรูปแบบของรหัสผู้ใช้และรหัสเซิร์ฟเวอร์เหมือนกัน ความแตกต่างคือที่ที่พวกเขาอยู่และไม่ว่าจะ/etc/ssh/sshd_configมีHostKeyคำสั่งชี้ไปที่พวกเขา เมื่อคุณติดตั้งแพ็คเกจ openssh-server มันจะสร้างคีย์ให้เซิร์ฟเวอร์ใช้โดยอัตโนมัติ นั่นคือที่ที่กุญแจที่มีลายนิ้วมือที่ไม่รู้จักมาจาก หากคุณต้องการที่จะเห็นลายนิ้วมือของเซิร์ฟเวอร์ SSH ของ (RSA *) ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pubที่สำคัญคุณสามารถเรียกใช้

* มีอัลกอริทึมการเข้ารหัสที่แตกต่างกัน แต่ละคนใช้คีย์ที่แตกต่างกัน คนทั่วไปคือ DSA (อ่อน), RSA (เก่าเริ่มต้น) และ ECDSA (เริ่มต้นใหม่)


1
ผลลัพธ์ของ Google สำหรับ "set ssh fingerprint" แม้ว่าคำเหล่านั้นจะไม่ถูกต้องทางเทคนิค แต่ก็ไม่ดีอย่างน่าประหลาดใจ ดีที่ฉันพบสิ่งนี้ในหมู่พวกเขา
Bart van Heukelom

4
ขอบคุณสำหรับสิ่งนี้. One note: 'sudo' ไม่จำเป็นถ้าคุณชี้ ssh-keygen ที่พับลิกคีย์ นั่นคือ: ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub. นอกจากนี้สำหรับการติดตั้งของฉันมันเป็นกุญแจสำคัญ ECDSA และไม่คีย์ RSA ที่ภูต SSH ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pubถูกใช้ดังนั้นในความเป็นจริงสิ่งที่ผมต้องวิ่งถูก
John Clements

มีปัญหากับการรับกุญแจสาธารณะจากฮาร์ดไดรฟ์เก่าของฉันและใช้ในการติดตั้งใหม่ของฉันเขียนทับพวกเขาใน / etc / ssh หรือไม่? กุญแจคือกุญแจใช่มั้ย
อดัม

@ อดัมฉันเห็นว่าไม่มีปัญหากับการทำเช่นนั้น สิ่งนี้จะช่วยหลีกเลี่ยงปัญหาเมื่อคุณเข้าสู่ระบบจากระยะไกลและรหัสมีการเปลี่ยนแปลง (ซึ่งจะเกิดขึ้นหากคุณติดตั้งรหัสใหม่ที่สร้างขึ้นใหม่)
Azendale

3
เมื่อฉันเชื่อมต่อsshกับโฮสต์ตั้งแต่ 14.04 ในครั้งแรกมันจะแสดงลายนิ้วมือ MD5 ในการทำssh-keygen16.04 แสดงลายนิ้วมือ MD5 คุณต้องใช้-E md5ตัวเลือก
jarno

14

คีย์โฮสต์ SSH จะถูกจัดเก็บไว้/etc/ssh/ซึ่งโดยทั่วไปคุณไม่จำเป็นต้องเลือก คีย์เหล่านี้ถูกสร้างขึ้นเมื่อติดตั้งแพ็คเกจ openssh-server

คุณสามารถแสดงรายการลายนิ้วมือของกุญแจได้ssh-keygen -l -f /etc/ssh/ssh_host_key.pubแม้ว่าคุณจะต้องทำสิ่งนี้ซ้ำสำหรับกุญแจสาธารณะแต่ละอัน

 


7

ssh-keygenไม่สร้างลายนิ้วมือ SSH ที่เซิร์ฟเวอร์ของคุณ ที่สร้างขึ้นโดยเซิร์ฟเวอร์ SSH ssh-keygenสร้างคู่คีย์สาธารณะ / ส่วนตัวสำหรับระบบของคุณที่คุณสามารถใช้เพื่อเข้าถึงเซิร์ฟเวอร์ SSH ของคุณในภายหลังโดยไม่ต้องส่งรหัสผ่านแบบข้อความธรรมดาไปยังเซิร์ฟเวอร์

ลายนิ้วมือของเซิร์ฟเวอร์ของคุณจะไม่แสดงอย่างชัดเจนว่าเป็นลายนิ้วมือของคู่คีย์สาธารณะ / ส่วนตัวที่คุณสร้างขึ้นเนื่องจากแยกจากกัน


3
โปรดทราบว่าคุณควรจะสามารถสร้างคีย์ ssh สำหรับเซิร์ฟเวอร์ของคุณ (ตรงกันข้ามกับสิ่งที่คุณพูด) แต่คุณต้องใส่มันไว้ในที่ที่ถูกต้องเพื่อที่พวกมันจะถูกใช้เพื่อจุดประสงค์นั้น
Azendale
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.