มีวิธีง่าย ๆ ในการตรวจสอบว่าคีย์ส่วนตัวที่กำหนดตรงกับคีย์สาธารณะที่กำหนดหรือไม่ ฉันมี * .pub และไฟล์ * .key ไม่กี่ไฟล์และฉันต้องตรวจสอบว่าไฟล์ไหนบ้าง
อีกครั้งไฟล์เหล่านี้คือ pub / key DSA
ฉันต้องการซับบางอย่าง ...
มีวิธีง่าย ๆ ในการตรวจสอบว่าคีย์ส่วนตัวที่กำหนดตรงกับคีย์สาธารณะที่กำหนดหรือไม่ ฉันมี * .pub และไฟล์ * .key ไม่กี่ไฟล์และฉันต้องตรวจสอบว่าไฟล์ไหนบ้าง
อีกครั้งไฟล์เหล่านี้คือ pub / key DSA
ฉันต้องการซับบางอย่าง ...
คำตอบ:
ฉันพบวิธีที่ใช้งานได้ดีกว่าสำหรับฉัน:
ssh-keygen -y -f <private key file>
คำสั่งนั้นจะส่งออกคีย์สาธารณะสำหรับคีย์ส่วนตัวที่กำหนดดังนั้นให้เปรียบเทียบผลลัพธ์กับแต่ละไฟล์ * .pub
id_rsa.pub.blahhost
ไฟล์ไม่กี่โหลและฉันไม่รู้ว่าอันไหนที่ตรงกับid_rsa
รหัสส่วนตัวโดดๆ & ฉันกำลังตั้งค่ารหัสผ่านที่ไม่มีรหัสผ่านดังนั้นฉันจึงสามารถโยกย้ายออกจากเว็บไซต์เก่าได้ การสร้างคู่คีย์ใหม่ไม่ใช่ตัวเลือก ฉันได้รับกุญแจของฉันตั้งค่าได้ดีและจะไม่ไปยุ่งที่
ฉันมักจะเปรียบเทียบแฮช MD5 ของโมดูลัสโดยใช้คำสั่งเหล่านี้:
Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5
Private Key: openssl rsa -noout -modulus -in server.key | openssl md5
CSR: openssl req -noout -modulus -in server.csr | openssl md5
หากแฮชตรงกันไฟล์ทั้งสองจะทำงานร่วมกัน
สำหรับคีย์ DSA ให้ใช้
openssl dsa -pubin -in dsa.pub -modulus -noout
เพื่อพิมพ์กุญแจสาธารณะจากนั้น
openssl dsa -in dsa.key -modulus -noout
เพื่อแสดงพับลิกคีย์ที่สอดคล้องกับไพรเวตคีย์จากนั้นเปรียบเทียบ
สมมติว่าคุณมีกุญแจสาธารณะในใบรับรอง x.509 และสมมติว่าพวกเขาเป็นกุญแจ RSA จากนั้นสำหรับแต่ละคีย์สาธารณะให้ทำ
openssl x509 -in certfile -modulus -noout
สำหรับคีย์ส่วนตัวแต่ละอันให้ทำ
openssl rsa -in keyfile -modulus -noout
จากนั้นจับคู่คีย์ด้วยโมดูลัส
การตรวจสอบสามารถทำได้ง่ายขึ้นด้วย diff:
diff <(ssh-keygen -y -f <private_key_file>) <public key file>
สิ่งเดียวที่แปลกคือ diff ต่างบอกว่าไม่มีอะไรเลยถ้าไฟล์เหมือนกันดังนั้นคุณจะได้รับการบอกกล่าวถ้าสาธารณะและส่วนตัวไม่ตรงกัน
diff -s
diff -qs
ส่งคืนคำตอบง่ายๆ "เหมือนกัน / ไม่เหมือนกัน" (2) คุณควรลบความคิดเห็นในไฟล์กุญแจสาธารณะก่อนเรียกใช้ diff
ลบพับลิกคีย์และสร้างคีย์ใหม่จากไพรเวตคีย์ เก็บไว้ในไดเรกทอรีที่แยกต่างหากหรือใช้การตั้งชื่อเพื่อให้ตรง
ป้อนคำสั่งต่อไปนี้เพื่อตรวจสอบว่าคีย์ส่วนตัวและคีย์สาธารณะเป็นชุดที่ตรงกัน (เหมือนกัน) หรือไม่เป็นชุดที่ตรงกัน (ต่างกัน) ในไดเรกทอรี $ USER / .ssh คำสั่ง cut ป้องกันความคิดเห็นที่จุดสิ้นสุดของบรรทัดในพับลิกคีย์จากการเปรียบเทียบอนุญาตให้เปรียบเทียบคีย์เท่านั้น
ssh-keygen -y -f ~/.ssh/id_rsa | diff -s - <(cut -d ' ' -f 1,2 ~/.ssh/id_rsa.pub)
เอาต์พุตจะมีลักษณะเหมือนหนึ่งในบรรทัดเหล่านี้
Files - and /dev/fd/63 are identical
Files - and /dev/fd/63 differ
ฉันเขียนเชลล์สคริปต์ที่ผู้ใช้ใช้เพื่อตรวจสอบการอนุญาตไฟล์ของ ~ / .ssh / ไฟล์และชุดคีย์ที่ตรงกัน มันแก้ปัญหาของฉันด้วยการตั้งค่าเหตุการณ์ของผู้ใช้ มันอาจช่วยคุณได้ https://github.com/BradleyA/docker-security-infrastructure/tree/master/ssh
หมายเหตุ: คำตอบก่อนหน้าของฉัน (ในมีนาคม 2018) ไม่ทำงานกับ openssh รุ่นล่าสุดอีกต่อไป คำตอบก่อนหน้า: diff -qs <(ssh-keygen -yf ~ / .ssh / id_rsa) <(cut -d '' -f 1,2 ~ / .ssh / id_rsa.pub)
หากคุณอยู่ใน Windows และต้องการใช้ GUI ด้วยputtygenคุณสามารถนำเข้ากุญแจส่วนตัวของคุณได้:
เมื่อนำเข้าแล้วคุณสามารถบันทึกรหัสสาธารณะและเปรียบเทียบกับของคุณได้
เข้ารหัสบางสิ่งด้วยรหัสสาธารณะและดูว่ารหัสส่วนตัวใดถอดรหัส
นี้บทความโครงการรหัสโดยไม่มีใครอื่นนอกจาก Jeff Atwood ใช้กระดาษห่อง่ายรอบ NET ชั้นเรียนการเข้ารหัสลับ สมมติว่าคีย์เหล่านี้ถูกสร้างขึ้นเพื่อใช้กับ RSA ใช้คลาสแบบไม่สมมาตรกับพับลิกคีย์ของคุณเพื่อเข้ารหัสและเหมือนกับคีย์ส่วนตัวของคุณในการถอดรหัส
ถ้ามันไม่คืนสิ่งใดเลยพวกมันจะจับคู่กัน:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost