Ssh कुंजी के प्रबंधन के लिए सबसे अच्छी प्रणाली? [बन्द है]


42

मुझे कई क्लाइंट कंप्यूटर (यानी लैपटॉप, डेस्कटॉप, आदि) मिले हैं, और मैं कई सर्वर मशीनों से जुड़ता हूं जिन्हें मैं प्रबंधित करता हूं, और मैं उन सभी को एसएसएच के माध्यम से लॉग इन करता हूं। मैं ssh कुंजियों के प्रबंधन की कई योजनाओं की कल्पना कर सकता हूं, जो समझ में आएंगी, और मैं दूसरों के बारे में उत्सुक हूं।

विकल्प 1: एक वैश्विक सार्वजनिक / निजी कीपर।

मैं एक सार्वजनिक / निजी कीपर उत्पन्न करूँगा, और प्रत्येक क्लाइंट मशीन पर निजी कुंजी और प्रत्येक सर्वर मशीन पर सार्वजनिक कुंजी डालूँगा।

विकल्प 2: प्रति सर्वर मशीन के लिए एक कीपर।

मैं प्रत्येक सर्वर मशीन पर एक कीपेयर उत्पन्न करता हूं, और प्रत्येक निजी कुंजी को अपने क्लाइंट मशीनों पर डालता हूं।

विकल्प 3: प्रति ग्राहक मशीन का एक कीपर।

प्रत्येक क्लाइंट मशीन में एक अद्वितीय निजी कुंजी होगी, और प्रत्येक सर्वर मशीन में प्रत्येक क्लाइंट मशीन के लिए सार्वजनिक कुंजी होगी, जिससे मैं कनेक्ट करना चाहूंगा।

विकल्प 4: प्रति क्लाइंट / सर्वर जोड़ी में एक कीपर

पूरी तरह से ओवरबोर्ड?

इनमें से कौन सबसे अच्छा है? क्या अन्य विकल्प हैं? सही कॉन्फ़िगरेशन के मूल्यांकन के लिए आप किन मानदंडों का उपयोग करते हैं?

जवाबों:


33

मैं विकल्प 3 का उपयोग करता हूं : प्रति ग्राहक मशीन का एक कीपर और यह मेरे लिए सबसे ज्यादा मायने रखता है। यहाँ कुछ कारण हैं:

  • यदि किसी क्लाइंट से समझौता किया जाता है, तो उस कुंजी (और केवल उस कुंजी) को सर्वर से निकालने की आवश्यकता होती है।
  • यह तय करना पर्याप्त लचीला है कि मैं सभी ग्राहकों से सभी सर्वरों को कंबल एक्सेस दिए बिना, जहां से पहुंच सकता हूं।
  • बहुत ही सुविधाजनक। Ssh-add के लिए केवल 1 कुंजी है, कोई भ्रम नहीं है।
  • विकल्प 4 पर सेट अप और व्यवस्थापन करना आसान है

विकल्प 4 अच्छा है, लेकिन अभी बहुत ज्यादा काम है। विकल्प 3 आपको बहुत कम परेशानी के साथ वहाँ 98% मिलता है।


4
मैं विकल्प 4 के बिंदु को देखने में विफल रहता हूं। यह बिना किसी उद्देश्य के कार्य करता है।
niXar

26

मैं एक समाधान का उपयोग करता हूं जो थोड़ा अधिक जटिल है, लेकिन बहुत ही बहुमुखी है क्योंकि मैं अपने घर नेटवर्क सर्वर, कार्यालय सर्वर, परामर्श क्लाइंट नेटवर्क सर्वर और अन्य विभिन्न प्रणालियों के लिए उपयोग किए जाने वाले एसएसएच पहचान कुंजी में कुछ अलगाव बनाए रखना चाहता हूं।

अब कहा कि मैं लिनक्स वर्कस्टेशन से लगभग अनन्य रूप से काम करता हूं, इसलिए मेरे पास एक USB कुंजी है जो LUKS एन्क्रिप्शन का उपयोग करके सेटअप है और मेरे X11 विंडो मैनेजर के साथ-साथ HAL डेमन LUKS एन्क्रिप्टेड ड्राइव का पता लगाता है और जब इसे डाला जाता है और डिक्रिप्शन पासफ्रंट के लिए संकेत देता है। घुड़सवार होना। एक एन्क्रिप्टेड ड्राइव पर इसे स्टोर करने से मैं अपने SSH कुंजी को कभी भी किसी भी कार्य केंद्र पर संग्रहीत नहीं करता हूं।

मेरे पास तब मेरी ~/.ssh/configफ़ाइल में निम्न कॉन्फ़िगरेशन है :

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

% D OpenSSH से उपयोगकर्ता के घर निर्देशिका होने के लिए अनुवाद किया है और में ~ / .ssh निर्देशिका मैं बनाया है keys.d जब यह ठीक से रखा जाता है एन्क्रिप्टेड USB ड्राइव पर निर्देशिका पथ के लिए एक सिमलिंक के रूप में।

% एल अभिव्यक्ति स्थानीय क्लाइंट मशीन होस्ट नाम और होना करने के लिए अनुवाद किया है % u स्थानीय ग्राहक के उपयोगकर्ता नाम करने के लिए अनुवाद किया जाएगा।

यह कॉन्फ़िगरेशन क्या करता है, SSH को 3 अलग-अलग अभिव्यक्तियों का उपयोग करके कुंजी खोजने की अनुमति देता है। उदाहरण के लिए यदि मेरे स्थानीय क्लाइंट का उपयोगकर्ता नाम jdoeऔर मेरा स्थानीय ग्राहक मशीन का नाम था, तो examplehostयह निम्नलिखित क्रम में दिखेगा जब तक कि यह एक कुंजी नहीं मिल जाता है जब दोनों मौजूद थे और दूरस्थ सर्वर द्वारा स्वीकार किया गया था।

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

आप % r अभिव्यक्ति का उपयोग दूरस्थ सर्वर उपयोगकर्ता नाम के लिए विशिष्ट % या दूरस्थ सर्वर होस्टनाम के लिए % h की तरह देख सकते हैं जैसे % u और % l का उपयोग किया गया था।

अद्यतन: अब मैं वास्तव में सिर्फ पढ़ने के लिए ssh- एजेंट संगतता के साथ GnuPG gpg- एजेंट का उपयोग करता हूं और अपने OpenPGP v2 स्मार्टकार्ड से प्रमाणीकरण कुंजी का उपयोग करता हूं।


वाह, महान समाधान, धन्यवाद! मैं सार्वभौमिक विन्यास को ~ /
.ssh

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

गजब का! मुझे यह सचमुच पसंद है।
बालू

मुझे लगता है कि आप विभिन्न क्लाइंट मशीनों के लिए अलग-अलग USB कुंजी का उपयोग कर रहे हैं। नहीं तो अलग-अलग चाबियों में क्या है यदि वे सभी एक ही स्थान पर संग्रहीत हैं? एक उल्लंघन के मामले में आपको उन सभी को रद्द करने की आवश्यकता होगी। जब तक (और शायद) मैं कुछ याद कर रहा हूँ यह सिर्फ चीजों को जटिल करने के लिए लगता है।
हालिल Halzgür

@ Halil andzgür, हां मैं परामर्श करता हूं और हमेशा एक ही कुंजी का उपयोग नहीं करना चाहता। जैसा कि USB कुंजी एन्क्रिप्ट किया गया है और किसी भी कंप्यूटर से जुड़ा नहीं है जब तक कि मुझे कनेक्शन बनाने के लिए इसकी आवश्यकता नहीं है सर्वर के भंग होने की कोई चिंता नहीं है और ड्राइव फाइल सिस्टम को डिक्रिप्ट करने के लिए पासफ़्रेज़ पर्याप्त रूप से लंबे हैं जो कि रिवोकिंग कुंजी को काफी सरल बनाते हैं।
जेरेमी बोस

6

मैं आपके दोनों विकल्प 1s को समाप्त कर दूंगा (जिनमें से मुझे संदेह है कि एक को विकल्प 2 ;-) माना जाता था क्योंकि निजी कुंजी संवेदनशील डेटा हैं, और यह संभव है कि उन्हें यथासंभव कम स्थानों पर रखें। मैं व्यक्तिगत रूप से कभी भी एक कंप्यूटर से दूसरे कंप्यूटर (या एक ही कंप्यूटर पर एक फ़ाइल से दूसरी फ़ाइल तक) की नकल नहीं कर सकता, सिवाय शायद बैकअप के। हालांकि अधिकांश एन्क्रिप्शन कुंजी के विपरीत, यदि SSH कुंजी खो जाती है तो यह दुनिया का अंत नहीं है (बस एक नया बनाएं, आप अपना डेटा खोना नहीं है)।


हाँ, एक उचित "विकल्प 2" का नाम बदलकर मुझे "निजी कुंजी कभी कॉपी न करें" का नियम पसंद है। यह एक अच्छा नियम है।
sl

1

विकल्प 3 और कुंजी प्रबंधन को संभालने के लिए कठपुतली की तरह कुछ का उपयोग करें।


क्या यह Reductivelabs.com/trac/puppet/wiki/PuppetInt Puppet का लिंक है?
एंडी

हाँ बस यही। साइट पर कुछ उदाहरणों को देखना सुनिश्चित करें। यह देखने में मदद करता है कि दूसरों ने पहले से ही क्या किया है - पहिया को सुदृढ़ करने की कोई आवश्यकता नहीं है।
diq

1

विकल्प 3।

यह आपको यह नियंत्रित करने की भी अनुमति देता है कि ग्राहक किस सर्वर तक पहुंच सकते हैं। उदाहरण के लिए, यदि क्लाइंट X को सर्वर A और B तक पहुंच की आवश्यकता है, लेकिन C या D, आप इसे केवल उन होस्ट के लिए सार्वजनिक कुंजी की प्रतिलिपि बनाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.