2012-11-05 9 views
60

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

ध्यान दें कि गीथब खाता स्तर कुंजी का पुन: उपयोग करने की अनुमति नहीं देता है (दो उपयोगकर्ताओं को कुंजी साझा नहीं करना चाहिए)। यह केवल पर प्रतिबंध पर प्रतिबंध है जिसे मैं पूछताछ कर रहा हूं।

और स्पष्ट होना, मैं कर रहा हूँ नहीं समाधानों की तलाश में (एक डमी उपयोगकर्ता बनाने, कई चाबियाँ, ... का उपयोग करें), लेकिन केवल तैनात कुंजी पर इस सीमा के लिए एक प्रशंसनीय विवरण के लिए।

संबंधित धागे:

+0

चूंकि कोई बेहतर तरीका नहीं है क्योंकि हमने एक समर्पित तैनाती उपयोगकर्ता बनाया है जिसे हम केवल पढ़ने के लिए पहुंच प्रदान कर रहे हैं। अंतिम परिणाम एक जैसा है। – Datageek

+0

यहां पर बहुत बढ़िया उत्तर: http://stackoverflow.com/questions/11656134/github-deploy-keys-how-do-i- प्राधिकरण-more-than-one-repository-for-a-single-mac – apple16

उत्तर

17

एकमात्र कारण, वैकल्पिक हल आप संदर्भ द्वारा सचित्र जा रहा (बनाने के लिए एक एकल "का निर्माण" उपयोगकर्ता, या एक ही id_rsa.REPONAME.pub प्रति रेपो साझा करना) है:

अन्य उपयोगकर्ता के लिए सार्वजनिक/निजी कुंजी साझा करने से बच

हालांकि कि अपनी स्थिति में ऐसा नहीं होगा (एकाधिक परियोजना का निर्माण), एक ही ssh कुंजी का पुन: उपयोग करने के लिए दो अलग उपयोगकर्ताओं के लिए संभावना खोलेगा की इजाजत दी उसी एसएसएच कुंजी को साझा करें, जो प्रमाणीकरण उद्देश्य को हरा देगा।

प्रमाणीकरण का अर्थ है:
"एक निश्चित ssh कुंजी का उपयोग कर संकेत करना चाहिए कि आप करने वाले हैं पता है जो यह उपयोग कर रहा है"।


GitHub पेज "Managing deploy keys" विभिन्न खातों ssh का उपयोग कर विवरण:

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

  • मशीन उपयोगकर्ता: (यह "डमी खाता" रणनीति है) उपयोगकर्ता खाते की कुंजी संलग्न करें। चूंकि इस खाते का उपयोग मानव द्वारा नहीं किया जाएगा, इसे मशीन उपयोगकर्ता कहा जाता है।
    आप इस उपयोगकर्ता के साथ उसी तरह व्यवहार करेंगे जैसे आप एक इंसान करेंगे, मशीन उपयोगकर्ता खाते की कुंजी संलग्न करें जैसे कि यह एक सामान्य खाता था।
    खाता सहयोगी या उन अभिलेखों तक टीम पहुंच प्रदान करें जिनके लिए उन्हें एक्सेस की आवश्यकता है।
    तो एक "कुंजी उपयोगकर्ता" से जुड़ी एक निजी कुंजी, प्रति सर्वर एक।

  • कुंजी (एक प्रति गिटहब रेपो) एसएसएच कुंजी जो सर्वर पर संग्रहीत है और गिटहब पर एक एकल रेपो तक पहुंच प्रदान करता है।
    यह कुंजी सीधे उपयोगकर्ता खाते के बजाय रेपो से जुड़ी हुई है।
    अपनी खाता सेटिंग्स पर जाने के बजाय, लक्षित रेपो के व्यवस्थापक पृष्ठ पर जाएं।
    "Deploy Keys" पर जाएं और "Add deploy key" पर क्लिक करें। सार्वजनिक कुंजी को पेस्ट करें और सबमिट करें।

इस बार, एसएसएच कुंजी किसी उपयोगकर्ता से जुड़ी नहीं है (जिसके लिए आप कई रेपो तक पहुंच प्रदान कर सकते हैं), लेकिन एक रेपो के लिए।
के लिए एसएसएच पहुंच प्रदान करना कई रेपो "मशीन उपयोगकर्ता" के बराबर होगा।

प्रमाणीकरण के कार्यकाल में:

  • कई रेपोस के लिए एक ही कुंजी का उपयोग ठीक है जब यह
  • का उपयोग कर (कुंजी उसकी/उसके खाते से संबद्ध ने कहा है कि जो) एक उपयोगकर्ता द्वारा किया जाता है है कई रेपो के लिए एक ही कुंजी ठीक नहीं है जब कुंजी रेपो द्वारा जुड़ी होती है, क्योंकि आप पर नहीं जानते हैं जो पर पहुंचा है।
    यह "मशीन उपयोगकर्ता" से अलग है जहां कई उपयोगकर्ता के लिए एक "उपयोगकर्ता" को सहयोगी के रूप में घोषित किया जाता है।
    यहां (कुंजी तैनात करें), कोई "सहयोगी" नहीं है, रेपो को दी गई एक सीधी एसएसएच पहुंच है।
+33

गिटहब समर्थन करता है दोनों * खाता स्तर * सार्वजनिक कुंजी, और * परियोजना स्तर * कुंजी (उर्फ तैनाती कुंजी)। * खाता स्तर * कुंजी का पुन: उपयोग करने की इजाजत नहीं है, लेकिन मेरा दावा है कि इसे * तैनाती कुंजी * की अनुमति नहीं है।मेरी एक खाता स्तर कुंजी मेरी सभी परियोजनाओं तक पहुंच की इजाजत देती है, तो मेरे पास एक नियोजित कुंजी क्यों नहीं हो सकती है जो मेरी परियोजनाओं में से कुछ * तक पहुंच की अनुमति देती है? यह केवल अधिक प्रतिबंधक है और मैं कोई भी चिंता नहीं बना सकता जिसे मैं देख सकता हूं। एक ही एसएसएच कुंजी साझा करने के लिए दो अलग-अलग उपयोगकर्ताओं के लिए * संभावना खोलने के बारे में आपकी चिंता उस परिदृश्य में तस्वीर में नहीं आती है। –

+0

@ डेविड एब्बो यह तस्वीर में नहीं आ सकता है, लेकिन वह चिंता (एक ही एसएस कुंजी साझा करने के लिए दो अलग-अलग उपयोगकर्ता) कारण है कि एक एसएसएच कुंजी साझा नहीं की जाती है। – VonC

+12

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

1

इसने मुझे परिदृश्य को तर्कसंगत बनाने और इस परिदृश्य के साथ आने के लिए बहुत सारी सोच ली।

कल्पना कीजिए कि आप एक ऐसे उपयोगकर्ता के लिए एक एकल तैनाती कुंजी बनाते हैं जिसे आपने एकाधिक रिपॉजिटरीज़ को सौंपा है। अब आप उस कुंजी को निरस्त करना चाहते हैं लेकिन इसका उपयोग कई स्थानों पर किया जाता है। तो सभी पहुंच को निरस्त करने में सक्षम होने के बजाय आप अनजाने में केवल आंशिक पहुंच को रद्द कर सकते हैं।

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

यह बहुत ही अनूठी चाबियाँ असाइन करने और प्रबंधित करने के लिए निश्चित रूप से निराशाजनक है लेकिन सुरक्षा प्रभाव इस बात से स्पष्ट हैं कि गिटहब ने अपनी नीति कैसे स्थापित की है: जब आप किसी कुंजी को निरस्त करते हैं तो आपको उस कुंजी द्वारा दी गई सभी पहुंच को निरस्त करने की गारंटी दी जाती है क्योंकि यह है केवल एक ही स्थान पर प्रयोग किया जाता है।

+0

मुझे इस स्पष्टीकरण से आश्वस्त नहीं है। एक उपयोगकर्ता को एकाधिक रिपॉजिटरीज़ तक पहुंचने की अनुमति देने से मूल रूप से अलग कैसे है, जिसे स्पष्ट रूप से अनुमति दी जाती है? यदि आप उस उपयोगकर्ता पर भरोसा नहीं करते हैं, तो आपको उन्हें प्रत्येक रेपो से निकालना होगा। –

+0

@ डेविड: 'एक उपयोगकर्ता को कई रिपॉजिटरीज़ तक पहुंचने की अनुमति देने से मूल रूप से अलग कैसे है, जिसे स्पष्ट रूप से अनुमति दी जाती है' क्या आप इसे और समझा सकते हैं? मेरे पास केवल एक डेवलपर खाता है और मैं देखता हूं कि आप खाता-व्यापी पहुंच (सभी रिपॉजिटरीज़ के लिए एक कुंजी) के लिए एसएसएच कुंजी जोड़ सकते हैं या व्यक्तिगत तैनाती कुंजी (प्रत्येक संग्रह के लिए एक कुंजी) जोड़ सकते हैं। यह अभी भी एक-से-कई या एक से एक रिश्ते है जहां "एक" कुंजी को रद्द करने से दोनों मामलों में "सभी" पहुंच रद्द हो जाती है। – Zhro

+0

आगे स्पष्टीकरण के लिए, कोई अवसर नहीं है (मैं क्या कह सकता हूं) गलती से कई से एक रिश्ते में एक कुंजी असाइन करने के लिए जहां निरस्त होने के बाद कहीं और पहुंच मौजूद हो सकती है। यह इस प्रतिबंध के लिए गितहब की प्रेरणा प्रतीत होता है लेकिन मैं केवल अनुमान लगा रहा हूं। – Zhro

संबंधित मुद्दे