गिट क्लोन - क्रेडेंशियल के लिए संकेत देने के बजाय विफल


14

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

मैं कैसे सर्वर को विफल कर सकता हूं (अधिमानतः एक समझदार त्रुटि संदेश और निकास कोड के साथ) इसके बजाय सर्वर प्रक्रिया के लिए इसे उपयोगकर्ता नाम और पासवर्ड देने की प्रतीक्षा कर रहा हूं?


हमारे पास एक मल्टी-सर्वर जेनकिंस सेट है, जो झुंझलाहट से इंतजार कर रहा है, जब तक कि यह मार डाला नहीं जाता है जब तक कि यह एक नए सर्वर पर ssh कुंजियों को याद नहीं करता है - यह कॉन्फ़िगर करने का एक तरीका है कि यह बस एक संदेश और गैर-शून्य निकास कोड के साथ विफल हो जाएगा। उपयोगी होना।
डैनी स्टेपल

यदि सभी कैच "बैच" मोड का उपयोग मेजबान कुंजी के लिए भी संकेत देने के लिए किया जा सकता है - तो यह आदर्श होगा।
डैनी स्टेपल

ये दोनों संबंधित हैं - इन्हें एक साथ रखने की कोशिश कर रहे हैं - serverfault.com/questions/61915/… , stackoverflow.com/questions/7772190/…
डैनी स्टेपल

जवाबों:


15

जीआईटी संस्करण 2.3 में एक पर्यावरण चर है GIT_TERMINAL_PROMPTजो जब सेट होता है तो 0क्रेडेंशियल के लिए प्रॉम्प्टिंग को अक्षम कर देगा।

आप इसके बारे में अधिक जानकारी man git(जीआईटी संस्करण में अपडेट करने के बाद 2.3) या जीथब पर इस ब्लॉग पोस्ट में प्राप्त कर सकते हैं ।

उदाहरण:

  • git clone https://github.com/some/non-existing-repo उपयोगकर्ता नाम और पासवर्ड के लिए संकेत देगा
  • GIT_TERMINAL_PROMPT=0 git clone https://github.com/some/non-existing-repo उपयोगकर्ता नाम और पासवर्ड के लिए संकेत दिए बिना विफल हो जाएगा

निराश होकर यहाँ वापस जाना होगा। https git क्लोन, git 1.8 के साथ el7 सर्वर पर। अगर दूसरे रेपो से 2.0 को अपडेट किया जा रहा है तो यह जांचने के लिए जा रहा है कि यह एक विकल्प है।
डैनी स्टेपल

0

यदि आप ssh ऑथेंटिकेशन का उपयोग कर रहे हैं, और linux पर, तो आप इसे डिसेबल करने के लिए ssh कमांड रिप्लेसमेंट बना सकते हैं।

"Sshnoprompt.sh" नामक एक फ़ाइल बनाएँ:

ssh -oBatchMode=yes $@

इस फ़ाइल को निष्पादन योग्य बनाएं chmod +x sshnoprompt.sh

फिर git शुरू करते समय:

GIT_SSH="sshnoprompt.sh" git clone foo@dummyserver:not_a_repo

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


0

Git संस्करण 1.8.3.1 से कार्य करना;

git clone -c core.askPass $echo url/or/path/to/git/repo

विन्यास core.askPassउपर्युक्त कार्यक्रम में क्रेडेंशियल्स के नियंत्रण को पास करके काम करता है। हालांकि $echoकठबोली आउटपुट के अलावा कुछ भी नहीं करती है, क्लोन प्रयास तुरंत विफल हो जाता है और संबंधित बैश पुनर्निर्देशन लागू होता है। इस कोड को केवल इस घटना में लगाया जाता है कि गिट रिपॉजिटरी निजी होती है, और विशेष त्रुटि भंडार के लिए प्रमाणीकरण को विफल बताते हुए पाइप आउटपुट आउटपुट करेगा। आप https://github.com/git/gitसार्वजनिक रिपॉजिटरी के खिलाफ उस निजी रिपॉजिटरी के खिलाफ जांच कर सकते हैं जिसके बारे में आप जानते हैं।

सौदा मीठा करने के लिए, आपको echoपहले की तरह एक कार्यक्रम का संदर्भ देने की आवश्यकता नहीं होगी । बस -c core.askPassनिम्नलिखित इनपुट के साथ git कॉन्फ़िगरेशन पास करना अभी भी उस घटना में विफलता का कारण बनेगा जब रिपॉजिटरी निजी होगी, क्योंकि कोड को यह नहीं पता होगा कि क्रेडेंशियल हैंडलिंग को किस प्रोग्राम को ऑफ़लोड करना है। हालांकि यह निश्चित रूप से एक पुरानी और सरल विधि है जिसका उल्लेख यहां किया गया है, मुझे नहीं पता कि क्या पुराने संस्करणों में इसका प्रभाव समान होगा।


आप बहुत गलत होते हुए भी कुछ हद तक सही हैं। सबसे पहले, आपके मामले $echoमें एक चर संदर्भ है जो (परेशान होना) खाली स्ट्रिंग का विस्तार करता है, इसलिए यह पूरी तरह से अर्थहीन है। यदि आप echoवहाँ (डॉलर के संकेत के बिना) डालते हैं , तो यह भी गलत होगा क्योंकि इसे रिपॉजिटरी स्थान के रूप में व्याख्या किया जाएगा। यह होना ही होगा -c core.askPass=echo
माइकल गोरी

-1

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

यह आपको वेबसर्विस में त्रुटियों (या कम से कम लॉग्स) की सतह की अनुमति भी देगा।


मैं वास्तव में ऐसा करने के बारे में कैसे जाऊंगा? इसे बैश में पहले पूरा करने की कोशिश, दोनों </dev/nullऔर nohup .. &काम करने के लिए नहीं लगता।
टिन तर्वकोविक

यह जवाब एक विशिष्ट उदाहरण के बिना उपयोगी नहीं है कि इसे कैसे प्राप्त किया जाए। विशेष रूप से कि 'स्पष्ट' तरीके काम नहीं करते हैं, जैसा कि ऊपर उल्लेख किया गया है।
माइकल गोरी

@ MichałGórny मैंने कुछ साल पहले ओपीएस प्रश्न को नहीं देखा था, लेकिन इस सवाल का पर्याप्त जानकारी नहीं थी (ओएस, टूलसेट) जो इसका जवाब देने में सक्षम है। स्टड और स्टडआउट को पुनर्निर्देशित करना। Git बहुत बदल गया है के बाद से प्रश्न पूछा गया था (उदाहरण के लिए विंडोज पर, यह क्रेडेंशियल के लिए बाहरी संवाद पॉप अप होता है अगर आप Azure DevOps से कनेक्ट कर रहे) वातावरण चर शीर्ष जवाब में सूचीबद्ध का उपयोग कर बंद ताकि आप बेहतर कर रहे हैं
मैथ्यू मीनारों
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.