वास्तव में SSH पर Git कनेक्शन का परीक्षण करने का वर्बोज़ तरीका?


109

जीआईटी का उपयोग करते समय, मुझे एसएसएच के ऊपर जीआईटी का उपयोग करने में समस्या है , और चूंकि यह काम से दोनों ही ठीक काम करता है, और घर पर एक अलग मॉडेम के साथ, यह स्पष्ट रूप से मेरा होम मॉडेम है जो काम कर रहा है। मुझे HTTP पर जुड़ने में कोई समस्या नहीं है।

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

काफी सभी "बड़े" (जैसे आदेशों fetch, cloneया pushअधिक डेटा के साथ) से git(तब भी जब साथ चलाने -v) बस "लटका" क्यों वे बंद कर दिया है के रूप में कोई संकेत नहीं के साथ दूर से जोड़ने के बीच में है, इसलिए वे किसी काम का नहीं कर रहे हैं ।

क्या एसएसएच कनेक्शन में क्या हो रहा है, इसके बारे में अधिक जानकारी प्राप्त करने का कोई तरीका है?

जवाबों:


113

वातावरण विविधता

Git संस्करण 2.3.0 से, आप पर्यावरण चर का उपयोग कर सकते हैं GIT_SSH_COMMANDऔर -vइस तरह क्रिया तर्क पास कर सकते हैं :

GIT_SSH_COMMAND="ssh -v" git clone example

अतिरिक्त क्रिया होने के लिए, इसे बनाएं -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Git संस्करण 2.10.0 से, जो Ubuntu 17.04 के रिपोज में होगा, आप इस कॉन्फ़िगरेशन को वैश्विक रूप से या प्रति रेपो को इस उदाहरण में सहेज सकते हैं:

git config core.sshCommand "ssh -vvv"
git pull

मेरे लिए कम से कम, अगर मैं ऐसा करता हूं: GIT_SSH_COMMAND="ssh -v" git clone exampleमैं SSH संस्करण को डीबग कर सकता हूं, यह Cloning intoसंदेश के बाद मुद्रित होता है, लेकिन इसमें विफल रहता है git clone। मैं GIT_SSH_COMMANDइसे हटाने के बाद काम करता हूं । अंत में, उद्देश्य को पूरा किया।
पालो ओलिवेरा

5
एक बार के लिए यह बेहतर होगा:git -c core.sshCommand="ssh -vvv" pull
जोसेफ के। स्ट्रॉस

git config --global core.sshCommand "ssh -vvv" git clone example
अज़ोदिया

81

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। डिबगिंग के लिए मैंने अपने ssh_config में एक लाइन जोड़ी। यहाँ मैंने इसे कैसे किया है:

git remote -v

वहां आपको इस तरह एक लाइन मिलेगी:

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

इस मामले में मेजबान है github.com। अब आप ssh config में होस्ट-एंट्री जोड़ सकते हैं:

vim ~/.ssh/config

और जोड़:

Host github.com
    LogLevel DEBUG3

गिट संचालन का उपयोग करने पर, आपको बहुत सारे डिबग संदेश प्राप्त होने चाहिए, अब। कम डिबग संदेश प्राप्त करने के लिए, उपयोग करने का प्रयास करेंDEBUG1

के लिए GIT संस्करणों> = 2.3.0 देखने @Flimm से जवाब एक समझदारी भरा समाधान के लिए।


14

के माध्यम से पढ़ना man git, कुछ उपयोगी पर्यावरण चर हैं जिन्हें आप सेट कर सकते हैं, GIT_TRACE_PACKETऔर GIT_TRACE। उदाहरण के लिए:

GIT_TRACE_PACKET=true git clone ssh://[...]

खेल के लिए थोड़ा देर से, लेकिन उम्मीद है कि यह किसी की मदद करता है!


1
यह सहायक है, लेकिन आपको SSH के साथ कनेक्शन समस्याओं के बारे में कोई संदेश नहीं मिलता है। लेकिन अगर SSH कनेक्शन काम करता है, तो यह आगे डीबग करने का तरीका है।
ट्रेंडफिशर

5

प्रति man ssh:

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.

तो, कोशिश करो ssh -v। यदि वह आपको यह नहीं बताता है कि आपको क्या जानना चाहिए, तो आप vअधिक विस्तृत डीबगिंग जानकारी के लिए एक या दो एस जोड़ सकते हैं । विशेष रूप से गितूब के लिए, प्रयास करें ssh -vvvT git@github.com

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


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

@IQAndreas, GitHub इस तरह SSH कनेक्शन की अनुमति देता है कि प्रमाणीकरण चरण में किया जाएगा और यदि समस्या वास्तव में SSH चरण में हो रही है, तो आप इसे उसी तरह से देखेंगे। यदि आप पा रहे हैं कि आप उस दूर भी नहीं जा सकते हैं, तो कुछ ऐसा हो रहा है जो कनेक्शन को बनने से भी रोक रहा है।
tgies

1
मैं ठीक है, और कभी कभी push/ pullकोई समस्या नहीं के साथ रेपो पर प्रमाणित किया जा रहा हूँ । लेकिन अक्सर यह कमांड के बीच में "लटका" होता है और जारी नहीं रहेगा (विशेषकर जब मैं बड़ी मात्रा में डेटा को एक बड़े cloneया जैसे ट्रांसफर करता हूं push)। कोई त्रुटि संदेश नहीं है, यह सिर्फ वहां बैठता है और जारी नहीं रखता है।
IQAndreas सेप

3

मुझे gsh (1) को ssh (1) के लिए उपयोग करने के लिए बाहरी कमांड बताने का कोई तरीका नहीं दिखता है, लेकिन वर्कअराउंड के रूप में, बस नाम बदलें / पथ / / ssh to / topath/to/ssh.orig, एक शेल बनाएं स्क्रिप्ट आवरण / पथ / से / ssh, और -v झंडे जोड़ें:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

जब मैं ssh ट्रांसपोर्ट पर काम कर रही git कमांड्स निष्पादित करता हूं तो मुझे वर्बोज़ आउटपुट मिलता है। डीबगिंग करने के बाद, स्क्रिप्ट हटाएं और /path/to/ssh.orig को / पाथ / / ssh पर पुनर्स्थापित करें।


4
फ़ाइलों को अंदर ले जाने के बजाय /usr/bin, रैपर स्क्रिप्ट को अंदर रखने पर विचार करें /usr/local/bin
मूरू

2
कम से कम मेरे अजीब विंडोज इंस्टॉल पर, पर्यावरण चर GIT_SSHको उस बाइनरी को इंगित करने के लिए सेट किया जा सकता है जिसे आप गिट का उपयोग करना चाहते हैं।
कोडर

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