PEM ssh कुंजी का फ़िंगरप्रिंट


30

मेरे पास एक PEM फ़ाइल है जिसे मैं एक चलित ssh-Agent में जोड़ता हूं:

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

मुझे फ़ाइल से सीधे कुंजी का फिंगरप्रिंट (जो मैं ssh- एजेंट में दिखता है) कैसे प्राप्त कर सकता हूं? मुझे पता है कि ssh-keygen -l -f some_key"सामान्य" ssh कुंजी के लिए काम करता है, लेकिन PEM फ़ाइलों के लिए नहीं।

अगर मैं .pem फ़ाइल पर ssh-keygen आज़माता हूँ, तो मुझे यह मिलता है:

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

इस कुंजी के साथ शुरू होता है:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

"नियमित" निजी कुंजी के विपरीत, जो दिखता है:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

आप क्यों सोचेंगे कि यह PEM फ़ाइलों के लिए काम नहीं करता है? जब आप इसे आज़माते हैं तो आपको क्या त्रुटि मिलती है? .ssh/id_rsaOpenSSH द्वारा बनाई गई एक फ़ाइल सभी डिफ़ॉल्ट का उपयोग कर एक PEM फ़ाइल है। निजी कुंजी PEM डिफ़ॉल्ट रूप से एन्कोडेड हैं। वास्तव में आप ओपनएसएसएल के साथ सीधे ओपनएसएसएल के साथ उत्पन्न आरएसए कुंजी का उपयोग कर सकते हैं।
ज़ॉडेचेस

.pem पर ssh-keygen से आउटपुट के साथ अद्यतन विवरण
अज्ञात

(देर से लेकिन नेक्रोच किया गया) @Zoredache: 7.2 से पहले (2016 में, इसके बाद Q) ssh-keygen -lएक प्राइवेटकी फाइल नहीं पढ़ सकता, हालांकि अन्य ssh-keygen(और ssh*) ऑपरेशन करते हैं। लेकिन जब ssh-keygen उत्पन्न करता है एक महत्वपूर्ण यह दोनों privatekey फ़ाइल जैसे लिखते हैं id_rsa और के साथ एक इसी publickey फ़ाइल .pubजोड़ा जैसे id_rsa.pub। पुराना आपके द्वारा निर्दिष्ट फ़ाइल नाम में जोड़ने की कोशिश ssh-keygen -l करेगा.pub और उस publickey फ़ाइल को पढ़ेगा।
dave_thompson_085

जवाबों:


34

यदि आप अपनी खोई हुई सार्वजनिक कुंजी फ़ाइल के फ़िंगरप्रिंट को प्राप्त करना चाहते हैं, तो आप इसे निजी कुंजी फ़ाइल से पुनर्प्राप्त कर सकते हैं :

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

फिर आप सार्वजनिक फिंगरप्रिंट का पता लगाने में सक्षम हैं:

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

कुछ नए सिस्टम पर, यह SHA256 फिंगरप्रिंट की को प्रिंट करता है। आप विकल्प का उपयोग करके कुंजी (कोलन फॉर्म) के एमडी 5 फिंगरप्रिंट को प्रिंट कर सकते हैं -E:

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

या एक कमांड लाइन के रूप में :

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

@ माइक का जवाब वास्तव में "सही" उत्तर है जो ओपी की तलाश में था (और मैं जो खोज रहा था)। एडब्ल्यूएस ने फिंगरप्रिंट को उस प्रारूप में प्रदान किया, जो कॉलोन द्वारा अलग किए गए अंकों के जोड़े के साथ है। उसका समाधान (दिए गए AWS पृष्ठ से लिया गया) भी इसी प्रकार से फिंगरप्रिंट उत्पन्न करता है, जिससे आप सही तरीके से सत्यापन कर सकते हैं।
माइक विलियमसन

50

AWS के " वेरिफाई योर की-पेयर फ़िंगरप्रिंट " दो सिंगल-लाइनर्स प्रदान करता है जो समस्या को हल करता है, यह इस बात पर निर्भर करता है कि आपकी कुंजी कैसे बनाई गई थी।

यदि आपने AWS का उपयोग करके अपनी प्रमुख जोड़ी बनाई है:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

या, यदि आपने तृतीय-पक्ष उपकरण के साथ अपनी मुख्य जोड़ी बनाई है:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(अंगुली के निशान ऊपर उत्पादन में redacted)


6

यहां एक लाइनर है जिसे स्थानीय स्तर पर सार्वजनिक कुंजी फ़ाइल के निर्माण की आवश्यकता के बिना आपको चाहिए।

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

यह एक स्ट्रिंग <<<को नियमित रूप से फ़ाइल ( /dev/stdin) के रूप में उपलब्ध करने के लिए यहां स्ट्रिंग का उपयोग करता है, न कि एक पाइप के रूप में ssh-keygen, जो केवल एक फाइल पर काम करेगा।

ओपनशीश के रिलीज 7.2ssh-keygen मानक इनपुट से फिंगरप्रिंटिंग का समर्थन करता है:

  • ssh-keygen (1): मानक इनपुट से फिंगरप्रिंटिंग की अनुमति दें, उदाहरण के लिए "ssh-keygen -lf -"

ध्यान दें कि यह कमांड उन निजी कुंजियों से टूटेगा जो पासफ़्रेज़ का उपयोग करती हैं और एजेंट का उपयोग नहीं कर रही हैं। यह एडब्ल्यूएस या ओपनस्टैक द्वारा उत्पन्न पेम फ़ाइलों के साथ काम करना चाहिए जो पासफ़्रेज़ का उपयोग नहीं करते हैं।

अधिक जानकारी के लिए https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin देखें ।


रिलीज़ नोटों ने कहा नहीं, लेकिन स्रोत के अनुसार 7.2 के रूप में -lभी एक प्राइवेटकी फ़ाइल (लेकिन स्टड से नहीं ) पढ़ने का समर्थन करता है ।
dave_thompson_085

2

आपको फ़िंगरप्रिंट निजी कुंजी फ़ाइल से नहीं, बल्कि सार्वजनिक कुंजी फ़ाइल से प्राप्त होता है।

वास्तव में, ssh-keygen ने आपको पहले ही यह बता दिया था:

./query.pem एक सार्वजनिक कुंजी फ़ाइल नहीं है।

इसे कुंजी के आधे हिस्से के खिलाफ चलाएं और इसे काम करना चाहिए।

अधिक आम तौर पर बोल रहा हूँ

इसके बारे में सोचें: फिंगरप्रिंट के मौजूद होने का कारण यह है कि आप सार्वजनिक कुंजी को पहचान सकते हैं। वास्तव में, निजी कुंजी का हैश प्राप्त करना सर्वर के बेकार होने के बगल में एक संभावित सुरक्षा मुद्दा है (जो प्रश्न में निजी कुंजी भी नहीं है)।

एक बार जब आपके पास सार्वजनिक कुंजी होती है, तो प्रक्रिया यह सत्यापित करने के लिए होती है कि क्लाइंट की संबंधित निजी आधे पर पकड़ है। चूंकि आप पहले से ही जानते हैं कि कौन सी कुंजी सत्यापित करने की कोशिश कर रही है, आपको फिंगरप्रिंट की आवश्यकता नहीं है।


समस्या यह है कि मेरे पास इस निजी के लिए एक सार्वजनिक कुंजी नहीं है :( और दूसरी बात, ssh-keygenएक आरएसए निजी कुंजी फ़ाइल पर काम करती है जिसमें शुरुआत में अतिरिक्त जानकारी है (मेरी प्रारंभिक पोस्ट देखें), लेकिन इस पर नहीं। ।
अज्ञात

फिर ऐसा कुछ भी नहीं है जो आप इसके बारे में कर सकते हैं। आप निजी हिस्से से कुंजी का आधा हिस्सा सार्वजनिक नहीं कर सकते हैं, जितना आप उल्टा कर सकते हैं।
स्टीफन

3
यह गलत है। जैसा कि @ominug ने ऊपर बताया है, ssh-keygen -yfऐसा करता है।
स्टीव बेनेट

4
@ स्टेफेन एक शुद्ध आरएसए स्तर पर सही होते हुए, अभ्यास में जिस तरह से पीकेसीएस में संग्रहीत होते हैं, निजी कुंजी के प्रारूप को वास्तव में दोनों कुंजी शामिल करते हैं। निजी बनाम सार्वजनिक के
Håkan Lindqvist

"आप निजी हिस्से से कुंजी का आधा हिस्सा सार्वजनिक नहीं कर सकते ..." - ओह हां, आप शायद कर सकते हैं। निजी कुंजी से मापांक लें, और सार्वजनिक प्रतिपादक के रूप में 65537 का उपयोग करें, और संभावना है, आपने सार्वजनिक कुंजी ढूंढ ली है।
जिम फ्लड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.