SSH कुंजियों को प्रबंधित करने की सलाह


13

SSH कीपियों के प्रबंधन के लिए आपने सबसे अच्छा अभ्यास क्या पाया है?

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

मेरे होम नेटवर्क में मेरा लैपटॉप (ubuntu), दो डेस्कटॉप (ubuntu / fedora ड्यूल बूट, फेडोरा / विंडो ड्यूल बूट) और एक मीडिया सिस्टम (ubuntu) शामिल है। काम में मेरे पास मेरा निजी लैपटॉप है (जिसका उपयोग मैं घर से काम करने के लिए करता हूं), मेरा डेस्कटॉप (फेडोरा), एक उत्पादन प्रणाली (आरएचईएल), और विंडोज़ (आह) और एक वीएम (फेडोरा) वाला लैपटॉप है। अभी तक सभी अच्छे हैं।

(मुझे अपनी कार्य प्रणाली पर अपना होम कीपेयर लगाने में कोई रुचि नहीं है, या मेरे होम सिस्टम पर मेरी कार्य कुंजी है। और हमारे पास अन्य सिस्टम के साथ फ़ाइल ट्रांसफ़र मैकेनाइज करने के लिए वर्चुअल उपयोगकर्ता खाते हैं, जहां निजी कुंजी को उत्पादन मशीन पर रहना चाहिए। अन्य प्रणालियों के बीच फ़ाइलों को स्थानांतरित करने के लिए।)

लेकिन अब Hadoop आता है, 100+ सिस्टम का एक बड़ा क्लस्टर, और इसके साथ और अधिक जटिलता, अधिक उपयोगकर्ता, और अधिक सीपियाँ। अब मुझे चाबियों का प्रबंधन करने की आवश्यकता है।

(मुझे स्पष्ट करने की आवश्यकता है। मैं एक सॉफ्टवेयर डेवलपर हूं जो एक क्लाइंट के लिए परामर्श कर रहा हूं, जो एक Hadoop क्लस्टर की तैनाती कर रहा है। वे चाबियों का प्रबंधन करने के लिए हैं। सिस्टम पर अपनी सार्वजनिक कुंजियों को रखने के लिए कई लोगों की आवश्यकता होगी। लिनक्स के जानकार, उन्होंने मुझसे मदद मांगी। मैंने एक सिस्टम एडमिन को काम पर रखने की सलाह दी, लेकिन जब तक वे करते हैं, मैं मदद कर रहा हूँ)

जब मुझे सार्वजनिक कुंजी को दूरस्थ प्रणाली में प्रकाशित करने की आवश्यकता होती है, तो सभी 'हाउ-टू' वेब पेज या तो ओवरराइट (>) (मौजूदा कुंजियों को नष्ट करना), या परिशिष्ट (>>) का सुझाव देते हैं (जो अच्छा है, मौजूदा कुंजियों को संरक्षित करता है) । लेकिन मुझे लगता है कि गंतव्य मशीन पर प्रत्येक सार्वजनिक कुंजी को अलग से संरक्षित करना, और उनका संयोजन बेहतर होगा। मैं सलाह के लिए देख रहा हूँ।

बहुत सारी चाबियों के प्रबंधन के लिए आपने सबसे अच्छा अभ्यास क्या पाया है?

धन्यवाद!


संपादित करें: एक पहलू को बहुत सारे सिस्टम पर चाबियाँ रखने की आवश्यकता होती है, और सहवर्ती CRUD (विशिष्ट उपयोगकर्ताओं के लिए क्रिएट, रीड, अपडेट, डिलीट / डिसेबल), जिसका अर्थ है कि यह पहचानने में सक्षम होना चाहिए कि कौन से उपयोगकर्ता किस कुंजी से संबंधित हैं।


क्या आप उपयोगकर्ता या होस्ट कीपर्स के बारे में बात कर रहे हैं? sshfpDNS में सार्वजनिक कुंजी के हस्ताक्षरों को लगाकर होस्टके इश्यू को हल करता है। उपयोगकर्ता क्रेडेंशियल के लिए आप या तो ओपनएसएसएच प्रमाणपत्रों में देखना चाहते हैं या स्पेसवॉक या कठपुतली जैसी किसी चीज का उपयोग करके सभी प्रमुख जोड़ों को एक केंद्रीय स्थान पर सहेज सकते हैं और उन्हें आवश्यकतानुसार तैनात कर सकते हैं। लगता है कि आप शायद बाद वाले को चाह रहे हैं क्योंकि आप नए सर्वर को क्लाइंट के रूप में सेट करेंगे और फिर फ़ाइल के नवीनतम संस्करण को तैनात करेंगे।
ब्राचली

मेरे पास एक और लैपटॉप (फेडोरा) है, माईबुक लाइव नेटवर्क डिस्क (रनिंग लाइनक्स) के लिए, दो निर्मित डेस्कटॉप हार्ड ड्राइव की प्रतीक्षा कर रहे हैं, और होम हूप क्लस्टर (सीखने) के निर्माण के लिए दो और की योजना है। हाँ, मुझे मुख्य प्रबंधन को समझने की आवश्यकता है।
ChuckCottrill

जवाबों:


12

आम तौर पर आपके पास क्लाइंट मशीन ("आम तौर पर जोर") पर 1 से अधिक कुंजी नहीं होनी चाहिए। मुझे यकीन नहीं है कि अगर मैं आपके प्रश्न को ठीक से समझ रहा हूं, लेकिन अगर आप कह रहे हैं कि आपके पास हर दूरस्थ प्रणाली के लिए एक अलग कुंजी है, तो आप निश्चित रूप से इसे गलत कर रहे हैं।

Ssh सार्वजनिक कुंजी क्रिप्टोग्राफी का उपयोग करता है। रिमोट सिस्टम पर आप जो कुंजी स्थापित करते हैं, वह सार्वजनिक कुंजी है, इस कुंजी को अन्यत्र पुन: उपयोग करने में कोई बुराई नहीं है। यह निजी कुंजी है जिसे संरक्षित किया जाना चाहिए और आपकी व्यक्तिगत प्रणाली पर बना रहेगा।

यह एक अच्छा विचार है कि निजी कुंजी केवल एक क्लाइंट पर ही रहती है, साझा नहीं की जाती है। ऐसा इसलिए है कि यदि किसी ग्राहक से समझौता किया जाता है, तो आप बस उस एक कुंजी को रद्द कर सकते हैं।


अब, यदि आप पूछ रहे हैं कि आप अपनी सार्वजनिक कुंजी को सैकड़ों प्रणालियों से कैसे प्राप्त कर सकते हैं तो ऐसा करने के कुछ तरीके हैं।

साझा घर निर्देशिकाओं का उपयोग करके सबसे आम तरीका है। सभी प्रणालियों को एनएफएस (या अन्य नेटवर्क फाइलसिस्टम) माउंट (या स्वचालित) करें।

दूसरा तरीका ssh में एक नई सुविधा का लाभ उठाना है। इसे विन्यास निर्देश कहा जाता है AuthorizedKeysCommand। मूल रूप से यह एक कमांड है जिसे sshd हर बार चलाएगा, जिसे सार्वजनिक कुंजी देखने की जरूरत है। कमांड केवल उपयोगकर्ता की सार्वजनिक कुंजी को STDOUT को बताती है। यह मुख्य रूप से तब उपयोग किया जाता है जब आपने घर निर्देशिकाओं को माउंट नहीं किया है, लेकिन अभी भी एक केंद्रीय प्रमाणीकरण सर्वर है ( फ्रीपा इसका लाभ उठाता है)।

बेशक आप /homeकेंद्रीय सर्वर से क्रोन जॉब rsync जैसी अन्य चीजें कर सकते हैं । लेकिन यह एक आम बात नहीं है।


मेरे पास घर में 8 मशीनें हैं और क्लाउड में "सर्वर" की एक चर संख्या (आवश्यकतानुसार आवश्यकतानुसार)। जब मैं 300 सर्वर इंस्टेंसेस को स्केल करता हूं, तो 300 क्लाइंट कीज़ होना मूर्खतापूर्ण होगा। इसलिए मेरे पास 16 सार्वजनिक कुंजियाँ हैं (प्रत्येक 8 होस्ट्स के प्रति 2 उपयोगकर्ता)। हार्ड मशीनों के लिए, मैं हर 3 महीने में चाबियों को धक्का देता हूं। क्लाउड इंस्टेंस के लिए, उन्हें कस्टम छवि में एकीकृत किया जाता है।
स्कीपरन

2

जब मुझे सार्वजनिक कुंजी को दूरस्थ प्रणाली में प्रकाशित करने की आवश्यकता होती है, तो सभी 'हाउ-टू' वेब पेज या तो ओवरराइट (>) (मौजूदा कुंजियों को नष्ट करना), या परिशिष्ट (>>) का सुझाव देते हैं (जो अच्छा है, मौजूदा कुंजियों को संरक्षित करता है) । लेकिन मुझे लगता है कि गंतव्य मशीन पर प्रत्येक सार्वजनिक कुंजी को अलग से संरक्षित करना, और उनका संयोजन बेहतर होगा। मुझे सलाह की तलाश है

मैं सार्वजनिक कुंजी भंडारण में किसी भी लाभ नहीं दिख रहा है दोनों में .ssh/authorized_keysऔर एक अलग फाइल में।

यदि आपके पास * अधिकृत_की * फ़ाइल में संग्रहीत वास्तविक कुंजियों पर एक नज़र है, तो आप देख सकते हैं कि उनके पास पहले से ही कुंजी की उत्पत्ति के बारे में मानव-पठनीय मेटा-जानकारी है। user@fooआम तौर पर सार्वजनिक कुंजी के लिए प्रविष्टि की तरह है:

ssh-rsa AAAAB3Nza...LiPk== user@example.net

इस प्रकार * अधिकृत_कीप्स * फ़ाइल से कुछ कुंजी (कुछ उपयोगकर्ताओं से जुड़ी) को हटाना / निकालना / हटाना बहुत आसान हो जाता है।

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

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


प्रत्येक उपयोगकर्ता अपनी कुंजी उत्पन्न करेगा, मेरा मानना ​​है कि आप कह रहे हैं कि प्रत्येक उपयोगकर्ता को मुख्य मूल के भाग के रूप में उपयोगकर्ता नाम @ hostname प्रदान करना चाहिए। जिसका अर्थ है कि एक स्क्रिप्ट जो उस उपयोगकर्ता नाम @ hostname को लागू करती है, प्रदान की जाती है, है ना?
16

यह निर्भर करता है कि वे अपनी चाबी कैसे बनाते हैं; जैसे ssh-keygenकि वें फॉर्म की एक टिप्पणी जोड़ देगा user@host; अन्य कीगनर (जैसे कि पोटीन के साथ आता है) ऐसा नहीं कर सकते हैं। लेकिन हां, यह थोड़ा स्क्रिप्ट बनाने के लिए तुच्छ होना चाहिए जो यह सुनिश्चित करता है कि प्रत्येक कुंजी में एक टिप्पणी-फ़ील्ड है जो उपयोगकर्ता या होस्ट संयोजन की पहचान करता है।
umläute

1

हाल ही में ओपनएसएसएच LDAP से ssh कीज प्राप्त करने की अनुमति देता है, sshd_config मैन पेज में 'AuthorizedKeysCommand' देखें । व्यक्तिगत रूप से मैं OpenSSH प्रमाणपत्र पसंद करूंगा, चाबियाँ नहीं, http://blog.habets.pp.se/2011/07/OpenSSH-cert प्रमाणपत्र देखें । आप किसी भी कॉन्फ़िगरेशन प्रबंधक जैसे कि cengine, कठपुतली, महाराज, नमक के साथ कुंजियों का प्रबंधन कर सकते हैं ...


0

एक और तरीका है जो लागू करने के लिए सुपर आसान है और कई उपयोगकर्ताओं को जोड़ने के मामले में थोड़ा अधिक लचीलापन देता है। https://userify.com/

यह आपको सर्वर के विभिन्न समूहों को परिभाषित करने की अनुमति देता है और उन सर्वरों के लिए सक्षम या अक्षम विभिन्न उपयोगकर्ताओं के लिए कुंजी है।

सुपर सरल स्थापना और प्रबंधन।

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