क्लोन क्लोन करने के लिए ssh विकल्प पास करना


103

मैं git cloneमेजबान होस्ट की कुंजी की जांच किए बिना ssh चलाने की कोशिश कर रहा हूं । मैं इसे इस तरह से कर सकता हूं:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host

क्या git क्लोन कमांड में समान ssh विकल्प पास करने का कोई तरीका है?

संपादित करें: एक प्रतिबंध है कि मैं ~/.ssh/configउस मशीन पर किसी भी अन्य फाइल को संशोधित या बदल नहीं सकता।


2
आप जो करने की कोशिश करते हैं वह बहुत जोखिम भरा है और आपको शायद ऐसा नहीं करना चाहिए। अधिकांश स्थितियों में दूरस्थ SSH सर्वर की पहचान खराब होने पर सत्यापन को अक्षम करना। आप SSH का उपयोग करके प्राप्त की गई सभी सुरक्षा को प्रभावी ढंग से अक्षम कर देते हैं और खुद को मैन-इन-बीच हमलों के लिए खोल देते हैं।
अनफ

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

जवाबों:


47

उन्हें अपने में जोड़ें ~/.ssh/config:

Host host
    HostName host
    User user
    SshOption1 Value1
    SshOption2 Value2

Hostप्रविष्टि क्या आप कमांड लाइन पर निर्दिष्ट करेंगे है, और HostNameसच होस्ट नाम है। वे समान हो सकते हैं, या Hostप्रवेश एक उपनाम हो सकता है। Userप्रवेश करता है, तो आप निर्दिष्ट नहीं करते हैं प्रयोग किया जाता है user@कमांड लाइन पर।

यदि आपको इसे कमांड लाइन पर कॉन्फ़िगर करना होगा, तो GIT_SSHइसमें अपने विकल्पों के साथ स्क्रिप्ट को इंगित करने के लिए पर्यावरण चर सेट करें।


4
मैं यह कहना भूल गया कि मैं उस मशीन की किसी भी फाइल को संशोधित नहीं कर सकता। अन्यथा, हाँ आपके समाधान काम करेगा।
डैनियल

28
GIT_SSHपर्यावरण चर का उपयोग करें ।
जोश ली

151

हाल ही में जारी git 2.3 एक नए चर "GIT_SSH_COMMAND" का समर्थन करता है, जिसका उपयोग मापदंडों के साथ एक कमांड को परिभाषित करने के लिए किया जा सकता है।

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@host

$GIT_SSH_COMMANDपूर्वता लेता है $GIT_SSH, और शेल द्वारा व्याख्या की जाती है, जो अतिरिक्त तर्कों को शामिल करने की अनुमति देता है।


क्या पहले नई लाइन होनी चाहिए git cloneया कोड सही है?
टॉम ज़ातो -

7
यह सही होना चाहिए, नई पंक्ति के बिना निम्नलिखित कमांड के लिए चर सेट किया जाना चाहिए। यदि आप एक नई पंक्ति जोड़ते हैं, तो आपको चर को निर्यात करने की आवश्यकता होगी, फिर यह भी काम करना चाहिए।
बोरिस

धन्यवाद, मैं 2 दिनों के लिए इस पर अटक गया हूँ!
जेम्स जेंट्स

Booya! धन्यवाद।
जैस्पर ब्लूज

यह git 1.9 वर्जन के साथ काम नहीं करेगा, मेरा मानना ​​है कि, git 1.9 के लिए कोई वैकल्पिक समाधान है
lazarus

33

विभिन्न कुंजियों को निर्दिष्ट करने के लिए बनाया गया एक अन्य विकल्प git config core.sshCommandgit 2.10 + (Q3 2016) के साथ है।

यह बोरिस के उत्तर में वर्णित पर्यावरण चर का एक विकल्प है )

Nguy Thn Thái pcloudsNgcc Duy ( ) द्वारा प्रतिबद्ध 3c8ede3 (26 जून 2016) देखें ।
(द्वारा विलय Junio सी Hamano - gitster- में dc21164 प्रतिबद्ध , 19 जुला 2016)

core.sshCommandGIT_SSH_COMMAND के लिए प्रति रिपॉजिटरी का उपयोग करने के लिए क्या मूल्य निर्दिष्ट करने के लिए एक नया कॉन्फ़िगरेशन चर जोड़ा गया है।

$GIT_ASKPASSया के समान $GIT_PROXY_COMMAND, हम भी पहले config फाइल से पढ़ते हैं फिर वापस आते हैं $GIT_SSH_COMMAND

यह एक ही होस्ट को लक्षित करने वाली विभिन्न निजी कुंजियों को चुनने के लिए उपयोगी है (उदाहरण github)

core.sshCommand:

यदि यह चर सेट है, git fetchऔर git pushइसके बजाय निर्दिष्ट कमांड का उपयोग करेगा sshजब उन्हें दूरस्थ सिस्टम से कनेक्ट करने की आवश्यकता होगी।
कमांड GIT_SSH_COMMANDपर्यावरण चर के रूप में उसी रूप में है और पर्यावरण चर सेट होने पर ओवरराइड किया जाता है।

इसका मतलब यह git cloneहो सकता है:

cd /path/to/my/repo
git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' 
# later on
git clone host:repo.git

यदि आप उस सभी रिपॉजिट के लिए आवेदन करना चाहते हैं , जैसा कि user1300959 टिप्पणियों में जोड़ता है , तो आप एक वैश्विक कॉन्फ़िगरेशन का उपयोग करेंगे।

git config --global core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

2
अधिक संभावना है कि आपके पास अभी तक रेपो नहीं है, क्योंकि आप करते हैं git clone- इस मामले में आप विश्व स्तर पर git ssh कमांड को कॉन्फ़िगर करना चाहते हैं:git config --global core.sshCommand ...
iurii

@ user1300959 अच्छी बात है, धन्यवाद। अधिक दृश्यता के उत्तर में मैंने आपकी टिप्पणी को शामिल किया है।
वॉनक

यह सबसे अच्छा जवाब है।
मिकशिंकेल

अंतिम भाग में आपको एपोस्ट्रोफ की कमी है
लुइगी लोपेज़

@LuigiLopez क्या आप उत्तर को संपादित कर सकते हैं? मैं आपके संपादन की समीक्षा करूंगा।
VonC

21

यहाँ GIT_SSH चर का उपयोग करके ssh के तर्कों को पारित करने के लिए ट्रिकी उदाहरण दिया गया है:

$ echo 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*' > ssh
$ chmod +x ssh
$ GIT_TRACE=1 GIT_SSH="$PWD/ssh" git clone user@host

नोट: ऊपर की लाइनें टर्मिनल कमांड-लाइनें हैं जिन्हें आपको अपने टर्मिनल में पेस्ट करना चाहिए। यह एक फ़ाइल ssh बनाएगा , इसे निष्पादन योग्य बनाएगा और इसे निष्पादित करेगा।

यदि आप निजी कुंजी विकल्प पास करना चाहते हैं, तो कृपया जाँचें कि कैसे बताएं कि किस निजी कुंजी का उपयोग करना है?


अच्छा! प्रश्न: दोनों $*और "$@"काम करने लगते हैं। आम तौर पर मैं उपयोग करता हूं "$@", क्योंकि दूसरे को पदावनत लगता है। क्या $*इस मामले में पसंद करने का कोई कारण है ?
m8080

16

सिस्टम स्तर सेटिंग्स को प्रभावित किए बिना रिपॉजिटरी स्तर कॉन्फ़िगरेशन

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

1. GIT_SSH_COMMANDदृष्टिकोण लेने वाले भंडार पर क्लिक करें ।

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone ssh://url

2. क्लोन पर, रिपॉजिटरी डायरेक्टरी में नेविगेट करें।

cd repo-dir

3. सेट core.sshCommandकॉन्फ़िगरेशन ताकि सभी भविष्य की कॉल को सामान्य रूप से git कमांड के साथ चलाया जा सके, लेकिन आंतरिक रूप से दिए गए git विकल्पों का उपभोग करना।

git config core.sshCommand 'ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

1
का अच्छा उपयोग core.sshCommand, कि मैं ऊपर उल्लेख किया है। Upvoted।
VonC

5

मुझे लगता है कि एक संस्करण> = 2.3 के लिए git अपडेट करें और उपयोग GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" git clone user@hostशर्त विकल्प है, लेकिन यदि यह संभव नहीं है, तो @ josh-lee ने एक अच्छा विकल्प दिया, लेकिन कृपया, ssh config फाइल को इंडेंट करने के लिए अपना उत्तर अपडेट करें।

Host host
    HostName host
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

0

विंडो मशीन में फॉलो स्टेप्स करने से यह समस्या ठीक हो गई है: -

  • C: \ Users \ username.ssh फ़ोल्डर के तहत कॉन्फ़िगर फ़ाइल बनाएँ।

  • एक कॉन्फ़िग फ़ाइल में निम्न पंक्ति जोड़ें।

    host <HOST>
    hostname <HOSTNAME>
    user <USER_NAME>
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes
    port <PORT_NUMBER>
    KexAlgorithms +diffie-hellman-group1-sha1
    
  • फिर कोशिश करें।

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