कई github परियोजनाओं के लिए समान तैनाती कुंजी का उपयोग करना


94

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

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

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

संबंधित सूत्र:


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

यहाँ पर शानदार जवाब: stackoverflow.com/questions/11656134/…
Apple16

जवाबों:


22

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

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

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

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


GitHub पेज " मैनेजिंग कीज मैनेजिंग " ssh का उपयोग कर विभिन्न खातों का विवरण देता है:

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

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

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

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

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

प्रमाणीकरण की अवधि में :

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

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

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

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

6
@DavidEbbo help.github.com/articles/managing-deploy-keys , तीन तरीकों में से कोई नहीं (खाता, तैनाती या मशीन खाते) में कहा गया है कि पहुँच के लिए एक निजी SSH कुंजी साझा करना शामिल है। विशेष रूप से परिनियोजन कुंजी परिदृश्य के साथ चिपके रहते हैं, क्योंकि यह सर्वर पर एक कुंजी है, क्योंकि इसके लिए कई रिपॉजिट पर मान्य होने का मतलब होगा एक मल्टीपल रिपोज पर एक निजी कुंजी साझा करना (या प्रतिकृति)। यह प्रमाणीकरण पहलू को कम करता है, और यदि कुंजी से छेड़छाड़ की जाती है, तो उजागर किए गए रेपो की संख्या को बढ़ाता है।
VonC

8
धन्यवाद, उस पृष्ठ में दिलचस्प जानकारी है। मैं आपके उत्तर को एक या दो दिनों में उत्तर के रूप में चिह्नित करूंगा यदि मुझे और कुछ नहीं दिखता है, हालांकि ईमानदार होने के लिए मैं अभी भी तर्क से आश्वस्त नहीं हूं। दो रेपो पर उपयोग की जाने वाली तैनाती कुंजी मशीन रिपेयर के समान सेट की पहुंच वाली मशीन कुंजी का उपयोग करने से कमज़ोर नहीं है।
डेविड एब्बो

11

दुर्भाग्य से, यह एक ऐसा परिदृश्य है जहां जीथब सिर्फ एक महत्वपूर्ण जोड़ी और एक खाते या परियोजना के बीच अंतर को गलत तरीके से बताता है।

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

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

यह समझ में आता है कि यदि कुंजी एक समझौता हो जाता है, तो अक्सर उल्लंघनों के परिप्रेक्ष्य से कुंजियों का उपयोग न करें। लेकिन यह सिर्फ एक अच्छा प्रशासन है नीति है । यह एक कुंजी को सिद्धांत पर एक से अधिक बार उपयोग करने से रोकने के लिए बहुत अधिक समझ में नहीं आता है । कुछ दरवाजों के लिए कुछ चाबियां हैं जिनका उपयोग फिर कभी नहीं किया जाता है, ठीक है, फिर से यह नीति के लिए नीचे है ।


थोड़ा और अधिक जटिल दृश्य मुख्य जोड़े को भूमिकाओं के रूप में चित्रित करना है । आपके पास कई महत्वपूर्ण जोड़े हो सकते हैं, और इसलिए कई भूमिकाएं प्राप्त करते हैं। निजी कुंजी आपको भूमिका के लिए प्रमाणित करती है।

गितुब की परियोजनाओं के लिए मुख्य मानचित्रण की तैनाती बताती है कि एक भूमिका कभी भी एक से अधिक कार्य को शामिल नहीं कर सकती है। यह शायद ही कभी यथार्थवादी है।

इनमें से कोई भी परिवर्तन नहीं करता है जो गीथूब अनुमति देता है, बिल्कुल।


1
हे। यह हास्यास्पद है कि यह कैसे अस्वीकृत हो जाता है, जब यह स्वीकृत उत्तर की तुलना में अधिक सही होता है। इसमें सचमुच कुछ भी नहीं है जो कई उपयोगकर्ताओं के साथ एक कुंजी साझा करने से रोकता है।
जेन्स फ़िंकहैसर

2

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

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

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

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


1
मैं इस स्पष्टीकरण से आश्वस्त नहीं हूं। यह कैसे मौलिक रूप से एक उपयोगकर्ता को कई रिपॉजिटरी तक पहुंचने की अनुमति देने से अलग है, जो स्पष्ट रूप से अनुमति है? यदि आपको अब उस उपयोगकर्ता पर भरोसा नहीं है, तो आपको उन्हें हर रेपो से हटाने की आवश्यकता होगी।
डेविड Ebbo

@ डेविड: How is that fundamentally different from allowing one user to access multiple repositories, which is obviously allowedक्या आप इसे आगे बता सकते हैं? मेरे पास केवल एक डेवलपर खाता है और मैं देखता हूं कि आप खाता-विस्तृत पहुंच के लिए ssh कुंजी (सभी रिपॉजिटरी के लिए एक कुंजी) जोड़ सकते हैं या अलग-अलग परिनियोजित कुंजी (प्रत्येक रिपॉजिटरी के लिए एक कुंजी) जोड़ सकते हैं। यह अभी भी एक-से-कई या एक-से-एक संबंध है जहां दोनों मामलों में "एक" कुंजी रिवोक "सभी" पहुंच को रद्द करना है।
झरो नोव

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

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