अगर एक RSA सार्वजनिक / निजी कुंजी जोड़ी मैच की जाँच कैसे करें


71

मेरे पास दो फाइलें हैं, id_rsaऔर id_rsa.pub। यदि वे एक वैध जोड़ी हैं, तो उन्हें प्रमाणित करने के लिए किस कमांड का उपयोग किया जा सकता है ?


मैं मिचेल्निक के उत्तर की पुष्टि करूंगा; इसने मुझे एक नई कुंजी जोड़ी बनाने से बचाया, धन्यवाद। ssh -vबहुत मदद भी करता है।
क्रिस के

जवाबों:


91

मैं एक सार्वजनिक / निजी डीएसए कीपर का परीक्षणssh-keygen -y -e -f <private key> करने के तरीके के बजाय उत्तर के तरीके को पसंद करूंगा ? स्टैक ओवरफ्लो पर।

ssh-keygen -y -e -f <private key>एक निजी कुंजी लेता है और इसी सार्वजनिक कुंजी को प्रिंट करता है जो सीधे आपकी उपलब्ध सार्वजनिक कुंजी की तुलना में हो सकती है। (संकेत: टिप्पणियों या कुंजी-विकल्पों से सावधान रहें।)

(यह कैसे नरक है? मैं केवल सार्वजनिक कुंजी को सीधे या अप्रत्यक्ष रूप से निजी कुंजी में एन्कोडेड कर सकता हूँ उम्मीद है ...)

मुझे स्वयं इसकी आवश्यकता थी और निम्नलिखित बैश वन-लाइनर का उपयोग किया। यदि कुंजियाँ एक साथ हों तो यह कुछ भी आउटपुट नहीं करना चाहिए। -qस्क्रिप्ट में अंतर करने के लिए थोड़ा लागू करें और अलग-अलग केवल रिटर्न कोड को उचित रूप से सेट करें।

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

1
@ मिचेल हैम्पटन: अब मैं आपकी टिप्पणी को समझता हूं। "स्वीकार किए गए उत्तर" को
स्टैकओवरफ्लो

1
@ सर्च: मैंने सोचा था कि कौन सी कुंजी निजी है और कौन सी सार्वजनिक है क्योंकि दो चाबियाँ समान हैं। क्या एक प्रमुख प्रयास केवल दूसरे के साथ डिक्रिप्ट किया जा सकता है। और अगर एक कुंजी दूसरे से प्राप्त की जा सकती है तो यह सब काम नहीं करेगा।
मिचेल्लनिक

1
@ मिचेलनिक आप सार्वजनिक कुंजी को निजी कुंजी से प्राप्त कर सकते हैं। आप सार्वजनिक कुंजी से निजी कुंजी प्राप्त नहीं कर सकते। उस सामग्री के बारे में बात नहीं कर रहे थे जिसे वह संलग्न करता है।
सर

1
@ मिचेल्निक इम्हो, सवाल एसओ और ऑन-टॉपिक पर विषय (और / या सुपरयूज़र) पर है। imho, इसे डुप्लिकेट के रूप में चिह्नित नहीं किया जाना चाहिए और इसके बजाय माइग्रेशन के लिए ध्वजांकित किया जाना चाहिए। लेकिन यह दोनों पर कवर किया गया है इसलिए मुझे जानकारी का अधिक पूर्ण साझाकरण पसंद है।
क्रिस के

10
जब तक id_rsa.pub मौजूद है, तब तक ssh-keygen -y -e -f id_rsaid_rsa की जाँच नहीं होगी , लेकिन id_rsa.pub से केवल मान लौटाएँ। इसलिए यदि आप echo 5 > id_rsaनिजी कुंजी को मिटाना चाहते हैं , तो अंतर करें, अंतर पास हो जाएगा! इसके अलावा, 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
यह वास्तव में स्वीकार किए गए उत्तर को बदलना चाहिए या कम से कम इसे आगे बढ़ने के संदर्भ में पार करना चाहिए।
थॉमसन

धन्यवाद! यह कमांड पासफ़्रेज़ वाली कुंजियों के साथ काम नहीं करता है, यह इंटरएक्टिव रूप से नहीं पूछता है। मैंने फ़ाइलों को दो () कमांड सामग्री निकाली और उन्हें अलग किया, जो काम करता है।
यारोस्लाव निकितेंको

5

यदि वे आपके स्थानीय सिस्टम पर हैं, तो id_rsa.pubअपने $HOME/.ssh/authorized_keysऔर कुंजी का उपयोग sshकरने के लिए छड़ी करें । अगर यह काम करता है, तो वे मेल खाते हैं।localhostid_rsa

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.