วิธีตรวจสอบว่าคู่คีย์สาธารณะ / ส่วนตัว RSA ตรงกันหรือไม่


71

ฉันมีสองไฟล์id_rsaและid_rsa.pub. คำสั่งใดที่สามารถใช้เพื่อตรวจสอบความถูกต้องหากเป็นคู่ที่ถูกต้อง


ฉันจะยืนยันคำตอบของ Michuelnik; มันช่วยให้ฉันไม่ต้องทำกุญแจคู่ใหม่ขอบคุณ ssh -vช่วยได้มากเช่นกัน
คริส K

คำตอบ:


91

ฉันต้องการssh-keygen -y -e -f <private key>วิธีแทนคำตอบที่ยอมรับของคุณจะทดสอบกุญแจสาธารณะ DSA สาธารณะ / ส่วนตัวได้อย่างไร บน Stack Overflow

ssh-keygen -y -e -f <private key>ใช้กุญแจส่วนตัวและพิมพ์รหัสสาธารณะที่เกี่ยวข้องซึ่งสามารถเปรียบเทียบได้โดยตรงกับกุญแจสาธารณะที่มีอยู่ของคุณ (คำแนะนำ: ระวังความคิดเห็นหรือตัวเลือกคีย์)

(มันทำยังไงกันเนี่ยฉันทำได้แค่หวังว่ากุญแจสาธารณะจะถูกเข้ารหัสโดยตรงหรือโดยอ้อมในกุญแจส่วนตัว ... )

ฉันต้องการสิ่งนี้เองและใช้ Bash one-liner ต่อไปนี้ มันจะไม่ส่งผลอะไรถ้ามีกุญแจอยู่ด้วยกัน ใช้ความ-qแตกต่างเล็กน้อยกับสคริปต์และ diff ตั้งค่ารหัสส่งคืนอย่างเหมาะสมเท่านั้น

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

1
@MichaelHampton: ตอนนี้ฉันเข้าใจความคิดเห็นของคุณแล้ว "คำตอบที่ได้รับการยอมรับ" ควรดูที่คำถามใน StackOverflow ไม่นี้คำถาม ...
Michuelnik

1
@Sirch: ฉันคิดว่าการตัดสินใจว่าคีย์ใดเป็นไพรเวตและอันใดที่เป็นสาธารณะก็คือการสุ่มแบบสุ่มเนื่องจากคีย์ทั้งสองนั้นเท่ากัน คีย์ตัวใดที่เข้ารหัสได้สามารถถอดรหัสกับอีกอันหนึ่งได้ และหากสามารถรับกุญแจได้จากที่อื่นสิ่งนี้จะไม่เกิดผล
Michuelnik

1
@Michuelnik คุณสามารถรับรหัสสาธารณะได้จากรหัสส่วนตัว คุณไม่สามารถรับคีย์ส่วนตัวจากพับลิกคีย์ได้ ไม่ได้พูดถึงเนื้อหาที่เข้ารหัส
Sirch

1
@Michuelnik imho คำถามอยู่นอกหัวข้อ SO และในหัวข้อที่นี่ (และ / หรือ Superuser) ไม่ควรทำเครื่องหมายว่าซ้ำกันและตั้งค่าสถานะเพื่อการย้ายข้อมูลแทน แต่มันครอบคลุมทั้งคู่ดังนั้นฉันจึงชอบการแบ่งปันข้อมูลที่สมบูรณ์ยิ่งขึ้น
Chris K

10
ตราบใดที่มี id_rsa.pub อยู่ssh-keygen -y -e -f id_rsaจะไม่ตรวจสอบ id_rsa เลย แต่เพียงคืนค่าจาก id_rsa.pub เช่นถ้าคุณecho 5 > id_rsaลบคีย์ส่วนตัวทำ diff ต่าง diff จะผ่าน! นอกจากนี้การรันssh-keygen -yef fooโดยที่ foo ไม่ใช่คีย์ที่ถูกต้อง (และไม่มี foo.pub ที่สอดคล้องกัน) จะบล็อกการรอการป้อนข้อมูลของผู้ใช้ดังนั้นควรใช้สคริปต์นี้อย่างระมัดระวัง

31

คำตอบที่ยอมรับอาจให้ผลลัพธ์ที่เป็นเท็จทั้งนี้ขึ้นอยู่กับตำแหน่งที่คุณได้รับไฟล์กุญแจสาธารณะที่คุณกำลังทดสอบ นี่เป็นเพราะพฤติกรรมที่อธิบายในความคิดเห็นโดย @drewbenn โดยเฉพาะเมื่อใช้ตัวเลือก -e กับไฟล์ไพรเวตคีย์เป็นพารามิเตอร์ตัวเลือก -f มันจะทำให้นกแก้ว (แต่ฟอร์แมตใหม่) สิ่งที่อยู่ในไฟล์กุญแจสาธารณะที่เกี่ยวข้อง

ในคำอื่น ๆ

ssh-keygen -y -f id_rsa

(เห็นได้ชัด) สร้างค่าคีย์สาธารณะและ

ssh-keygen -y -e -f id_rsa

เพียงและเอาท์พุท (และฟอร์แมต) ที่สำคัญในการที่มีอยู่ id_rsa.pub สิ่งที่มันเป็น

ในกรณีของฉันฉันต้องตรวจสอบว่าทั้งคู่ไม่ได้เสียหาย ดังนั้นฉันจึงตัดสินใจเปรียบเทียบสิ่งต่อไปนี้:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

กับ

cut -d' ' -f 2 id_rsa.pub

ดังนั้น:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

บางทีนี่อาจจะไม่ยืดหยุ่น แต่ก็ดีสำหรับความต้องการของฉัน อาจช่วยคนอื่นได้


5
สิ่งนี้ควรแทนที่คำตอบที่ยอมรับหรืออย่างน้อยก็เกินในแง่ของ upvotes
thomanski

ขอขอบคุณ! คำสั่งนี้ใช้ไม่ได้กับคีย์ที่มีวลีรหัสผ่านมันไม่ถามคำถามแบบโต้ตอบ ฉันแยกเนื้อหาคำสั่งทั้งสอง () ออกเป็นไฟล์และแตกต่างกันซึ่งทำงานได้
Yaroslav Nikitenko

5

หากพวกเขาอยู่ในระบบท้องถิ่นของคุณติดid_rsa.pubในของคุณ$HOME/.ssh/authorized_keysและsshการlocalhostใช้id_rsaกุญแจ ถ้ามันใช้งานได้

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.