मुख्य बातचीत करते समय वास्तव में ssh क्या भेजता है?


10

जब स्पष्ट रूप से पहचान फ़ाइल को ssh में निर्दिष्ट करना:

ssh -i ./id_rsa ...

मेरे पास ssh डीबग ट्रेस में ये पंक्तियाँ हैं:

debug1: Offering public key: ./id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply

इसका मतलब यह है कि ssh- जनित id_rsaसार्वजनिक RSA प्रतिपादक भी शामिल है? id_rsaप्रारूप के बजाय यह स्पष्ट है कि इसमें "BEGIN निजी कुंजी" ब्लॉक के साथ निजी कुंजी है, इसलिए "सार्वजनिक कुंजी की पेशकश" का अर्थ "सर्वर से सार्वजनिक कुंजी को भेजने" के अलावा कुछ और होना चाहिए।

संपादित करें:

स्पष्ट करने के लिए, मैं जानना चाहता हूं कि वास्तव में "सार्वजनिक कुंजी की पेशकश" लाइन के पीछे क्या चल रहा है। यदि क्लाइंट कई कुंजियाँ रखता है, तो वे सभी एक-एक करके सर्वर को प्रदान किए जाएंगे।


उस समस्या में जोड़ने के लिए सर्वर के लिए यह जांचने की एक विधि है कि क्या हमें चुनौती से पहले एक अच्छी कुंजी मिली है। चूँकि मेरे पास पहले से ही एक सर्वर था जो हमारी चाबी को अस्वीकार करने से पहले ही अस्वीकार कर देता था। त्रुटि जहां नाम के कारण अच्छी तरह से निर्दिष्ट नहीं है।
गोपी

जवाबों:


12

SSH सर्वर से जुड़ने के लिए और अपने सार्वजनिक / निजी कीपर के साथ प्रमाणित करने के लिए आपको पहले अपनी सार्वजनिक कुंजी को सर्वर के साथ साझा करना होगा।

इस सर्वर से अपनी निजी कुंजी के लिए सार्वजनिक कुंजी को कॉपी, और में जोड़कर किया जाता है ~/ssh/authorized_keysया तो नकल द्वारा / पेस्ट को कॉपी, id_rsa.pubकरने के लिए ~/.ssh/authorized_keysसर्वर पर या के साथ cat id_rsa.pub >> ~/.ssh/authorized_keys, सूची में जोड़कर।

जब आप कनेक्ट करते हैं, तो सर्वर एक चुनौती पर हस्ताक्षर करने के लिए आपकी सार्वजनिक कुंजी का उपयोग करता है, और आपका ग्राहक id_rsaचुनौती को डिक्रिप्ट करने के लिए आपकी निजी कुंजी का उपयोग करता है , इसे सर्वर की जनता के साथ पुनः एन्क्रिप्ट करें host keyऔर इसे वापस भेजें।

होस्ट सत्यापित करता है कि आपने अपनी निजी कुंजी के साथ अपनी प्रतिक्रिया को डिक्रिप्ट करके चुनौती को ठीक से डिक्रिप्ट किया है, और क्लाइंट / होस्ट साझा डेटा के आधार पर एक एन्क्रिप्टेड कनेक्शन स्थापित करते हैं, आपके सार्वजनिक / निजी कुंजी पर नहीं।

एक्सचेंज में NO POINT आपकी निजी कुंजी है, या मेजबान की निजी कुंजी एक दूसरे के लिए एक्सचेंज की गई या प्रकट हुई है। आपकी सार्वजनिक कुंजी IS सर्वर पर संग्रहीत है, लेकिन यही कारण है कि यह एक सार्वजनिक कुंजी है।


हां, यह सब अच्छा और अच्छा है, लेकिन सर्वर के साथ चुनौती को एन्क्रिप्ट करने के लिए सार्वजनिक कुंजी की पहचान करने से पहले यह सब होता है । मेरे पास कई चाबियां हैं और वे एक-एक करके सर्वर को "ऑफर" कर रहे हैं। वास्तव में क्या होता है? और हां, मुझे एहसास है कि निजी कुंजी वास्तव में नहीं भेजी जाती है, मुझे संभवतः उस पंक्ति को प्रश्न से पूरी तरह से हटा देना चाहिए। : पी
एलेक्स बी

जब आप निर्दिष्ट ssh -i keynameकरते हैं कि आप अपने ssh क्लाइंट को बता रहे हैं कि आप किस सर्वर से कनेक्ट करने के लिए उपयोग करने की योजना बना रहे हैं। यदि ~/.ssh/आपके ग्राहक में एक दर्जन चाबियां हैं, तो प्रत्येक कुंजी के माध्यम से पुनरावृत्ति नहीं होगी। यह संभावित रूप से कुछ अन्य फ़ाइलनामों के लिए दिखेगा ~/.ssh/id_rsa, ~/.ssh/id_dsaजिन्हें क्लाइंट में कोडित किया गया है, या उस होस्ट के लिए कौन सी कुंजी निर्दिष्ट की गई है ~/.ssh/config... छोटी कहानी; आपका क्लाइंट सर्वर के लिए कोई कुंजी / भेंट / प्रस्ताव नहीं है।
cpbills

जब आप कनेक्ट करते हैं, तो आपका / क्लाइंट / सर्वर से चुनौती को डिक्रिप्ट करता है, और फिर प्रतिक्रिया को भेजने के लिए चुनौती को एन्क्रिप्ट करने के लिए मानकीकृत स्थानीय निजी कुंजी की अपनी सूची में आता है। यदि चुनौती-प्रतिक्रिया विफल हो जाती है, तो यह अगले हार्ड-कोडेड कुंजी-नाम पर / उस / निजी कुंजी के साथ पुनः एन्क्रिप्ट हो सकता है, और फिर से प्रयास कर सकता है। फिर से, आपकी कुंजी, सार्वजनिक और निजी लॉगिन प्रमाणीकरण पर सर्वर के साथ / साझा / साझा नहीं की जाती हैं।
cpbills

1
ओह, मैं आपकी टिप्पणी को फिर से पढ़ता हूं; मेजबान: मेजबान कुंजी के साथ चुनौती को एन्क्रिप्ट करता है, ग्राहक: मेजबान पब कुंजी के साथ चुनौती को डिक्रिप्ट करता है, ग्राहक: निजी कुंजी के साथ चुनौती का प्रयास करता है, मेजबान: मेजबान में सभी सूचीबद्ध सार्वजनिक कुंजी के साथ चुनौती को डिक्रिप्ट करने का प्रयास ~/.ssh/authorized_keysजानता है कि चुनौती क्या है, और यह क्या देख रहा है इसलिए, एक बार जब कोई सार्वजनिक कुंजी इसे अनलॉक करती है, तो यह उस कुंजी का उपयोग करना जानता है।
cpbills

@cpbills, माफ करना मैं उल्लेख करना भूल गया कि मेरे पास फॉरवर्ड एजेंट से कुछ चाबियां हैं, इसलिए कई चाबियाँ पेश की जाती हैं (-vvv लॉग उन सभी की पेशकश को दिखाता है, भले ही मैं पहचान फ़ाइल निर्दिष्ट करता हूं)।
एलेक्स बी १

1

सार्वजनिक / निजी कुंजी क्रिप्टोग्राफी एक बहुत ही सरल प्रणाली पर आधारित है:

आपके पास एक सार्वजनिक कुंजी है जो एक तरफ़ा एन्क्रिप्शन करने में सक्षम है, और एक निजी कुंजी जो डी क्रायशन में सक्षम है । सार्वजनिक कुंजी तब दुनिया में सभी को दी जा सकती है, और कोई भी आपके एन्क्रिप्ट किए गए डेटा को डिक्रिप्ट नहीं कर पाएगा, हालांकि वे डेटा को एन्क्रिप्ट करने में सक्षम होंगे जिसे आप अपनी निजी कुंजी के साथ डिक्रिप्ट कर सकते हैं।

तो आपके प्रश्न का उत्तर है, "आपकी सार्वजनिक कुंजी।"


हां, धन्यवाद, मुझे पता है कि सार्वजनिक कुंजी क्रिप्टो कैसे काम करती है, लेकिन मैं एसएसएच प्रोटोकॉल की बारीकियों, और प्रमुख प्रारूप को जानना चाहता हूं। मुझे यह जानने में दिलचस्पी है कि क्या यह निजी निजी फाइल में सार्वजनिक प्रतिपादक को संग्रहीत करता है, या नहीं? सभी के लिए मुझे पता है कि "सार्वजनिक कुंजी की पेशकश" का मतलब आपके निजी कुंजी के साथ एक गैर-हस्ताक्षर करना हो सकता है, इसलिए सर्वर एक संबंधित सार्वजनिक कुंजी पा सकता है।
एलेक्स बी

हाँ। यह ssh-keygen -y आपको निजी कुंजी की सार्वजनिक कुंजी देगा, उल्टा काम नहीं करता
Métt Frëëman

1

मुझे नहीं लगता कि यह वास्तव में इस समय सार्वजनिक या निजी कुंजी भेजना चाहिए। क्लाइंट द्वारा पहले से ज्ञात सर्वर पर निजी कुंजी का उपयोग करके एक एन्क्रिप्शन का प्रदर्शन किया जाना चाहिए। होस्ट सार्वजनिक कुंजी का उपयोग करके इस संदेश को डिक्रिप्ट कर सकता है, यह जानते हुए कि केवल एक जो इसे ठीक से एन्क्रिप्ट कर सकता है वह क्लाइंट है जो संबंधित निजी कुंजी रखता है, इस प्रकार क्लाइंट को प्रमाणित करता है।

मेरा मानना ​​है कि यह कहता है Offering public key: ./id_rsaक्योंकि यह निजी कुंजी (संग्रहीत ./id_rsa) का उपयोग करता है जो सर्वर द्वारा ज्ञात प्लेनटेक्स्ट पर एन्क्रिप्शन का प्रदर्शन करता है और फिर सर्वर इस सिफरटेक्स्ट को डिक्रिप्ट करने के लिए सार्वजनिक कुंजी का उपयोग करेगा और पुष्टि करेगा कि यह प्लेटेक्स्ट से मेल खाता है। सार्वजनिक कुंजी फ़ाइल ./id_rsa.pubको प्रारंभिक कुंजी पीढ़ी के बाद क्लाइंट द्वारा कभी भी आवश्यक नहीं होना चाहिए। यह केवल डिक्रिप्शन के लिए सर्वर द्वारा उपयोग किया जाता है।


मुझे ऐसा कुछ होने पर संदेह था, लेकिन मैं कुछ बारीकियों (यानी वास्तविक एसएसएच कुंजी बातचीत प्रोटोकॉल) चाहता था। यकीन नहीं हो रहा है कि आप निराश क्यों हुए।
एलेक्स बी

खेद है कि मेरा जवाब हाथ से लहराने वाला था। मैं SSH कुंजी बातचीत की बारीकियों से परिचित नहीं हूं, केवल सार्वजनिक-कुंजी प्रमाणीकरण में आवश्यक सामान्य बातचीत। मुझे गैर-विशिष्ट उत्तर के लिए वोट दिया गया हो सकता है।
ट्रे हुनर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.