SSH- एजेंट से एक विशिष्ट अग्रेषित कुंजी का उपयोग करें?


30

मान लीजिए कि मेरे पास अन्य चाबियों के साथ जीथब के लिए एक कुंजी है। मैंने ssh-add -Lअपने घर के कंप्यूटर पर अपने ssh एजेंट ( बहुत सारी लाइनें लौटाता है) में बहुत सी कुंजियाँ जोड़ी हैं । मेरे में .ssh/configमैंने यह सेट किया है कि किस होस्ट के साथ किस कुंजी का उपयोग करना है, इसलिए जैसे

ssh -T -vvv git@github.com 2>&1 | grep Offering

देता है

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

केवल एक कुंजी की पेशकश की जाती है, जैसा कि अपेक्षित है। लेकिन फिर कुछ मेजबान बी के साथ एसएस-आईएनजी ForwardAgent yesऔर उसी कमांड को दोहराते हुए, मुझे मिलता है

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

अर्थ यह मेरी सभी कुंजी की कोशिश करता है। यह समस्याग्रस्त है क्योंकि सर्वरों की वापसी से पहले सीमित संख्या में कुंजियों को आज़माया जा सकता है Too many authentication failures। इसलिए मैंने .ssh/configहोस्ट बी को शामिल करने के लिए संपादन की कोशिश की

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

लेकिन तब मुझे कोई महत्वपूर्ण प्रसाद नहीं मिलता, बल्कि मिलता है

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

जो मुझे लगता है कि कुंजी नहीं मिली (और?) का अर्थ है कि आखिरकार, कुंजी मेरे घर के कंप्यूटर ए पर स्थित है, मेजबान बी नहीं है, इसलिए सवाल यह है कि मेजबान बी में इसे कैसे देखें? आशा है कि मैं सवाल समझाने में कामयाब रहा।

जवाबों:


28

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

होस्ट B पर आप टाइप करके एजेंट से सार्वजनिक कुंजी निकाल सकते हैं ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pubऔर फिर उस फ़ाइल से इंगित कर सकते हैं~/.ssh/config


FYI सार्वजनिक कुंजी नाम से कोई फर्क नहीं पड़ता। यह सामग्री के आधार पर एजेंट से उचित कुंजी का चयन करेगा।
एकोस्टाडिनोव

@akostadinov सच। यदि आप sshसार्वजनिक कुंजी फ़ाइल को बिना किसी संबद्ध निजी कुंजी फ़ाइल के साथ इंगित करते हैं, तो उसे फ़ाइल से सार्वजनिक कुंजी को पढ़ना चाहिए और एजेंट को हस्ताक्षर उत्पन्न करने के लिए संबंधित निजी कुंजी का उपयोग करना चाहिए।
कैस्परल्ड

यह प्रभावी रूप से होस्ट B पर आपकी कुंजी को बचाता है! समाधान के लिए @ mc0e द्वारा नीचे उत्तर देखें जो सर्वर पर कुंजी को नहीं बचाता है।
पिट

2
@Pitt नहीं यह नहीं है। यह केवल सार्वजनिक कुंजी संग्रहीत करता है । और यह कोई समस्या नहीं है क्योंकि सार्वजनिक कुंजी को कभी भी पहली जगह में गुप्त रखने की उम्मीद नहीं थी। एजेंट फ़ॉरवर्डिंग होस्ट को तब तक कुंजी का उपयोग करने के लिए पहुंच प्रदान करता है जब तक कि एजेंट फ़ॉरवर्डिंग की जगह है, लेकिन एजेंट कभी भी गुप्त कुंजी को कहीं भी नहीं भेजेगा।
कैस्परल्ड

@kasperd निजी कुंजी की वास्तविक प्रतिलिपि की आवश्यकता नहीं है, जबकि आपके पास कुंजी के साथ उपयोगकर्ता एजेंट का लाइव कनेक्शन है। रूट के रूप में आप अन्य लॉग इन किए गए उपयोगकर्ताओं के एजेंट कनेक्शन तक पहुंच सकते हैं।
mc0e

5

@Kasperd से अच्छा जवाब, लेकिन यह भी ध्यान दें कि यदि होस्ट B से समझौता किया गया है, या यदि आप उन सभी को वहां मौजूद विशेषाधिकारों पर भरोसा नहीं करते हैं, तो आप अभी भी अपनी सभी चाबियों का दुरुपयोग कर रहे हैं जब तक आप लॉग इन करते हैं। उस मेजबान पर

इसलिए एक बेहतर तरीका आपको केवल उन कुंजियों तक पहुंच प्रदान करना हो सकता है जिनकी आपको आवश्यकता है। शायद कोशिश करें ssh-agent-filterजो डेबियन / उबंटू रिपॉजिटरी में है, या गितुब से

संपादित करें: मैंने चुनिंदा कुंजी अग्रेषित करने के ssh-identबजाय बसाया है ssh-agent-filter, हालांकि यह उतना आसान अनुभव नहीं है जितना कोई उम्मीद कर सकता है।


1
उनके उत्तर पर @ कास्परड की टिप्पणी से: "यह नहीं है। यह केवल सार्वजनिक कुंजी संग्रहीत करता है। और यह कोई समस्या नहीं है क्योंकि सार्वजनिक कुंजी को कभी भी पहली जगह में गुप्त रखने की उम्मीद नहीं थी। एजेंट अग्रेषण होस्ट की पहुंच प्रदान करता है। जब तक एजेंट अग्रेषण की जगह है, तब तक कुंजी का उपयोग करें, लेकिन एजेंट कभी भी गुप्त कुंजी कहीं भी नहीं भेजेगा "
Bdoserror

1
@Bdoserror रूट के रूप में आप ssh- एजेंट कनेक्शन का दुरुपयोग कर सकते हैं, जबकि संबंधित उपयोगकर्ता लॉग इन है। आप बस SSH_*पर्यावरण चर की नकल करते हैं और जहाँ भी आप वास्तविक कॉपी नहीं होने के बावजूद कुंजी का उपयोग करना चाहते हैं, वहां लॉग इन करें।
mc0e

स्पष्ट करने के लिए: यह उत्तर वास्तव में गलत है - जबकि mc0e का दुरुपयोग परिदृश्य वास्तविक है, इसका सार्वजनिक कुंजी को बचाने से कोई लेना-देना नहीं है - यदि मध्यवर्ती होस्ट से समझौता किया जाता है, तो आपके एजेंट कनेक्शन का उपयोग आपकी निजी कुंजी के साथ प्रमाणित करने के लिए किया जा सकता है, भले ही चाहे आप मध्यवर्ती होस्ट पर सार्वजनिक कुंजी को बचाएं या नहीं। आपकी निजी कुंजी wilkl से समझौता नहीं किया जाता है, और सार्वजनिक कुंजी को सहेजना आसान नहीं होगा, क्योंकि एजेंट से संबंध रखने वाला कोई भी हमलावर इसे वैसे भी सार्वजनिक कुंजी के लिए पूछ सकता है।
मोनिका

@ marc-lehmann ने जो कुछ लिखा था, उसे फिर से पढ़ा। यदि आप कुंजियाँ अग्रेषित करते हैं तो वे उजागर हो जाएंगे, लेकिन आप यह सीमित कर सकते हैं कि कौन-सी कुंजियाँ आगे बढ़ें।
mc0e

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