दूरस्थ त्रुटि: दूरस्थ रिपॉजिटरी से कनेक्ट होने पर "होस्ट कुंजी सत्यापन विफल"


222

मैं एक दूरस्थ गिट रिपॉजिटरी से कनेक्ट करने का प्रयास कर रहा हूं जो मेरे वेब सर्वर पर रहता है और इसे मेरी मशीन पर क्लोन करता है।

मैं अपने आदेश के लिए निम्नलिखित प्रारूप का उपयोग कर रहा हूं:

git clone ssh://username@domain.com/repository.git

इसने मेरी टीम के अधिकांश सदस्यों के लिए ठीक काम किया है। आमतौर पर इस कमांड को चलाने के बाद Git उपयोगकर्ता के पासवर्ड के लिए संकेत देगा, और फिर क्लोनिंग चलाएगा। हालाँकि, मेरी एक मशीन पर चलने पर मुझे निम्नलिखित त्रुटि मिलती है:

होस्ट कुंजी सत्यापन विफल रहा।

घातक: दूरस्थ रिपॉजिटरी से नहीं पढ़ सकता था।

हम इस भंडार से जुड़ने के लिए SSH कुंजियों का उपयोग नहीं कर रहे हैं, इसलिए मुझे यकीन नहीं है कि Git इस विशेष मशीन पर एक के लिए जाँच क्यों कर रहा है।


1
आप इस रिपॉजिटरी से जुड़ने के लिए SSH का उपयोग कर रहे हैं , ध्यान दें कि आपका URL किस तरह से शुरू होता हैssh://
Brandon

मुझे भी ऐसी ही समस्या है । क्या कोई कृपया मेरी सहायता कर सकता है? मैं फँस गया :(
सस्पॉल

जवाबों:


164

आप SSH प्रोटोकॉल के माध्यम से कनेक्ट कर रहे हैं, जैसा कि ssh://आपके क्लोन URL पर उपसर्ग द्वारा इंगित किया गया है । SSH का उपयोग करते हुए, प्रत्येक होस्ट के पास एक कुंजी है। ग्राहक किसी विशेष पते से जुड़ी होस्ट कुंजी को याद रखते हैं और होस्ट कुंजी को बदलने के लिए कनेक्ट होने से इनकार करते हैं। यह बीच के हमलों में आदमी को रोकता है।

Domain.com की होस्ट कुंजी बदल गई है। यदि यह आपको गलत नहीं लगता है , तो${HOME}/.ssh/known_hosts domain.com के लिए लाइन हटाने के लिए संपादन करके अपने स्थानीय कैश से पुरानी कुंजी को हटा दें या SSH उपयोगिता को आपके साथ ऐसा करने दें

ssh-keygen -R domain.com

यहां से, अपडेट की गई कुंजी को या तो अपने आप से रिकॉर्ड करें

ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

या, समतुल्य रूप, चलो sshयह तुम्हारे लिए अगली बार जब आप के साथ कनेक्ट करते हैं git fetch, git pullया git push(या यहां तक कि एक सादे ol ' ssh domain.comहाँ संकेत दिए जाने पर जवाब देने से)

होस्ट 'domain.com (abcd)' की प्रामाणिकता स्थापित नहीं की जा सकती।
RSA कुंजी फिंगरप्रिंट XX है: XX: ...: XX।
क्या आप वाकई कनेक्ट करना जारी रखना चाहते हैं (हां / नहीं)?

इस संकेत का कारण है domain.com अब known_hostsइसे हटाने के बाद आपके सिस्टम में नहीं है और संभवत: सिस्टम में नहीं है /etc/ssh/ssh_known_hosts, इसलिए sshयह जानने का कोई तरीका नहीं है कि कनेक्शन के दूसरे छोर पर होस्ट वास्तव में domain.com है या नहीं। (यदि गलत कुंजी अंदर है /etc, तो प्रशासनिक विशेषाधिकारों वाले किसी व्यक्ति को सिस्टम-वाइड फ़ाइल को अपडेट करना होगा।)

मैं आपको दृढ़ता से प्रोत्साहित करता हूं कि आप उपयोगकर्ताओं को चाबियों के साथ प्रमाणित करने पर विचार करें। इस तरह, ssh-agentसुविधा के लिए मुख्य सामग्री को संग्रहीत कर सकते हैं (बजाय सर्वर से प्रत्येक कनेक्शन के लिए अपना पासवर्ड दर्ज करने के लिए), और पासवर्ड नेटवर्क पर नहीं जाते हैं।


3
मज़ेदार तथ्य, दौड़ना sudo ssh-keygen -R domain.comआपकी मौजूदा known_hostsफ़ाइल का नाम बदल सकता है known_hosts.old, और एक प्रतिलिपि बनाएँ जो केवल मूल द्वारा पठनीय हो । ( -rw------- root root) आप इसे आसानी chownसे उपयुक्त उपयोगकर्ता के पास वापस भेज सकते हैं , लेकिन आप एक दोपहर की डिबगिंग भी बर्बाद कर सकते हैं कि गिट क्यों टूट गया है। : डी
एंड्रयू रूकर्ट

1
Are you sure you want to continue connecting (yes/no)?। मेरे समान गलती मत करो। आपको टाइप करना है yes। बस हिट मारने से डिफ़ॉल्ट रूप से हां का चयन नहीं होता है
जोलोनबी

306

जैसा कि मैंने पहले ही क्लोनिंग git रेपो में उत्तर दिया था त्रुटि - होस्ट कुंजी सत्यापन विफल हो गया। घातक: दूरस्थ छोर अप्रत्याशित रूप से लटका हुआ है , अधिकृत मेजबान की सूची में GitHub जोड़ें:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts


3
यह सबसे सुरक्षित तरीका है, जो पहले से ही मौजूद है। यह मानते हुए कि आप इसे केवल एक बार चलाते हैं, न कि हर बार जब आप सर्वर से जुड़ते हैं।
Zenexer

मेरी कंपनी की निजी फिट रिपॉजिटरी में कुंजी के रूप में इकाडा का उपयोग किया गया है, इसलिए यदि समाधान काम नहीं कर रहा है, तो शायद यह इसलिए है क्योंकि एल्गोरिथ्म सही नहीं है
फेंडी

8
यह स्वीकृत उत्तर होना चाहिए। मेरा दिन बचाने के लिए धन्यवाद।
Keyur

मेरे लिए भी काम किया, मैं सोच रहा था कि मैं अपने ही रेपो का क्लोन क्यों नहीं बना सकता
StackAttack

किसी ने इस पोस्ट को गलत तरीके से फ़्लैग किया है। समीक्षा से
वाई हा ली

55

मैं इसी तरह का मुद्दा था, लेकिन, SSH कुंजी का उपयोग कर। Tupy के उत्तर से, ऊपर, मुझे पता चला कि यह समस्या ज्ञात होस्ट की सूची में मौजूद नहीं होने या github.com ज्ञात_होस्ट फ़ाइल के साथ है। यहाँ मैं इसे हल करने के लिए कदम उठाए हैं -

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. इस कमांड के साथ सार्वजनिक कुंजी खोलें $ cat ~/.ssh/id_rsa.pubऔर इसे कॉपी करें।
  5. अपने GitHub प्रोफ़ाइल पर SSH कुंजी सूची में id_rsa.pub कुंजी जोड़ें ।

1
@OJFord FYI: मैंने मूल उत्तर को इस तरह संपादित किया है जिससे आपकी टिप्पणी अप्रचलित हो जाती है। टीबीएच और पूरे सम्मान के साथ यह पहली जगह में पूरी तरह से सही नहीं था। यदि touchकेस ~/.sshनिर्देशिका मौजूद नहीं है, तो कमांड विफल हो जाएगी , इसलिए चरण 1 की अभी भी आवश्यकता थी। इसके अलावा आपको पुनर्निर्देशन touchका उपयोग >>करने से पहले फ़ाइल की आवश्यकता नहीं है । यह आवश्यक होने पर बनाया जाएगा (लेकिन सिर्फ फ़ाइल, संपूर्ण पथ नहीं, इसलिए अभी भी mkdir -pआवश्यक है)। -pविकल्प बना यह मामला निर्देशिका पहले से मौजूद में काम करते हैं।
टाड लिस्फी

1
यह # 2 है ssh-keyscanजो नई ssh कुंजी जोड़ने पर Github डॉक्स से गायब है।
फिल एंड्रयूज

1
मैं अपनी Dockerfileअनुमति की कमी के साथ मुद्दों पर चल रहा था । यहाँ पर 2 स्टेप जोड़ना उस समस्या को ठीक करता है! महान काम के लिए धन्यवाद
स्पेंसर पोलक

37

यह इसलिए हो रहा है क्योंकि जीथुब वर्तमान में आपके ज्ञात होस्ट में नहीं है।

आपको अपने ज्ञात मेजबानों में जीथब जोड़ने के लिए कहा जाना चाहिए। यदि ऐसा नहीं हुआ है, तो आप ssh -T git@github.comफिर से संकेत प्राप्त करने के लिए दौड़ सकते हैं ।


2
यह सही उत्तर है यदि आपको कभी संकेत न मिले।
मथायस हेजमैन

15

मेरे लिए, मुझे बस प्रॉम्प्ट पर "हां" लिखना था जो पूछता है कि "क्या आप वाकई कनेक्ट करना जारी रखना चाहते हैं (हां / नहीं)?" इसके बजाय केवल Enter दबाएं।


यह उत्तर मुझे यह महसूस करने के लिए प्रेरित करता है कि मुझे '
रे

1
@ शशः यदि आप सभी को जानते हैं कि बिटबकेट सर्वर ज्ञात_होस्ट में है, तो आप फ़ाइल को मैन्युअल रूप से संपादित कर सकते हैं। रेपो को क्लोन करने की आवश्यकता नहीं है यदि ऐसा करने का एकमात्र कारण है।
कोड-अपरेंटिस

7

मुझे एक नई स्थापित प्रणाली पर समान समस्या मिली, लेकिन यह एक udv समस्या थी। कोई /dev/ttyनोड नहीं था , इसलिए मुझे करना पड़ा:

mknod -m 666 /dev/tty c 5 0

1
यह मेरे लिए काम करता है क्योंकि / dev / tty एक फ़ाइल के रूप में बनाया गया था, बहुत ही अजीब! (इसलिए आपको इसे हटाना होगा तब इसे मैक्लोड के साथ फिर से बनाना होगा)
डूम्सडे

@Geoffroy, मैंने हटाया / dev / tty और अब जब sudo करते हैं, तो मुझे इस त्रुटि का सामना करना पड़ता है: sudo: क्षमा करें, आपके पास sudo चलाने के लिए एक tty होना चाहिए
मिलाद

@ xe4me मैंने कभी नहीं कहा कि आपको इसे हटा देना चाहिए, यह वास्तव में आवश्यक प्रणाली पर निर्भर करता है। रिबूट को इसे ठीक करना चाहिए।
जियोप्रॉय

@Geoffroy, वास्तव में पहला कमेंटेटर, कहा कि मुझे हटाना है और रीक्रिएट करना है: d नोप, रिबूटिंग से काम नहीं चला, मुझे रूट को बताना पड़ा, उन्होंने इसे ठीक किया: d
मिलाद

6

यदि आप कार्यालय इंट्रानेट में हैं (अन्यथा खतरनाक) जो हमेशा फायरवॉल द्वारा संरक्षित होता है, तो बस आपके ~ / .sh / config में निम्न पंक्तियाँ होती हैं।

होस्ट *
StrictHostKeyChecking कोई
UserKnownHostsFile = / dev / null


2
यह अभी भी खतरनाक है, हमारे कॉर्पोरेट फायरवॉल के बिना। आपको कैसे पता चलेगा कि आप सर्वर की कुंजी को सत्यापित किए बिना वास्तविक गितुब से बात कर रहे हैं?
Mnebuerquo

1
कॉरपोरेट वातावरण में स्थानीय गिट रिपोज का उपयोग ज्यादातर किया जाता है, कभी भी ओपन सोर्स नहीं होता है। फ़ाइल के शीर्ष पर सबसे खराब स्थिति। ssh अधिक विशिष्ट मिलानों का चयन करने के लिए ssh के लिए स्पष्ट होस्ट संबंधित विन्यास लाइनें हो सकती है।
सुनील

5

मेरे लिए जो काम किया गया था, वह पहले नए कंप्यूटर की मेरी SSH कुंजी को जोड़ने के लिए था, मैंने GitLab के इन निर्देशों का पालन किया - SSH कुंजी जोड़ें । ध्यान दें कि जब से मैं Win10 पर हूं, मुझे विंडोज पर Git Bash में ये सभी कमांड करने थे (यह नियमित DOS cmd शेल में काम नहीं करता था)।

फिर Git Bash में, मुझे उस git cloneरेपो का एक काम करना था, जिसके साथ मुझे समस्या थी, और मेरे मामले में मुझे इसे एक अलग नाम पर क्लोन करना था क्योंकि मेरे पास पहले से ही यह स्थानीय रूप से था और मैं अपने कमिट्स खोना नहीं चाहता था। उदाहरण के लिए

git clone ssh://git@gitServerUrl/myRepo.git myRepo2

तब मुझे इसे ज्ञात होस्ट सूची में जोड़ने का संकेत मिला, सवाल यह हो सकता है:

क्या आप वाकई कनेक्ट करना जारी रखना चाहते हैं (हां / नहीं)?

मैंने "हाँ" टाइप किया और यह आखिरकार काम कर गया, आपको आम तौर पर इसके समान संदेश प्राप्त करना चाहिए:

चेतावनी: ज्ञात मेजबानों की सूची में स्थायी रूप से '[आपका रेपो लिंक]' (ECDSA) जोड़ा गया।

ध्यान दें : यदि आप विंडोज पर हैं, तो सुनिश्चित करें कि आप सभी कमांड के लिए Git Bash का उपयोग करते हैं, यह नियमित cmd शेल या पावरशेल में काम नहीं करता था, मुझे वास्तव में Git Bash में यह करना था।

अंत में मैंने दूसरा क्लोन रेपो ( myRepo2उदाहरण में) डिलीट कर दिया और अपने पहले रेपो में वापस चला गया और मैं अपने पसंदीदा संपादक VSCode में सामान्य रूप से सभी Git सामान कर सकता था।


वास्तव में, मेरा Cygwin प्रॉम्प्ट मेरे git bash प्रॉम्प्ट की तरह लगभग दिखता है, लेकिन यह केवल git bash प्रॉम्प्ट में काम करता है!
जोशिया योडर

3

यदि आप विंडोज के लिए गिट का उपयोग कर रहे हैं।

  • गिट जीयूआई खोलें।
  • Git GUI में स्थानीय गिट रिपॉजिटरी खोलें।
  • यदि रिमोट पहले से मौजूद है तो रिमोट जोड़ें या पुश करें।
  • इस सवाल का "हां" जवाब दें कि क्या आप जारी रखना चाहते हैं।

GUI क्लाइंट आपके लिए कुंजी जोड़ता है ~/.ssh/known_hosts। यह याद रखना आसान है यदि आप इसे अक्सर नहीं करते हैं और गिट कमांड लाइन (मानक विंडोज कमांड लाइनों के ssh-keyscanनिष्पादन योग्य नहीं है) का उपयोग करने की आवश्यकता से बचा जाता है ।


2

जब दूरस्थ सर्वर निजी रेपो से जुड़ना चाहता है, तो वह ssh के माध्यम से प्रमाणित होगा। Ssh-keygen के साथ निजी-सार्वजनिक कुंजी युग्म बनाएं या यदि आपके पास पहले से ही सार्वजनिक-निजी कुंजी है। निजी रेपो की सेटिंग में सार्वजनिक कुंजी को कॉपी और पेस्ट करें।

YourPStreetRepo -> Settings -> Deploys -> Add तैनाती कुंजी -> सार्वजनिक कुंजी पेस्ट करें।

अब रिमोट सर्वर निजी रेपो से जुड़ सकेगा।

नोट: तैनात कुंजियाँ केवल रेपो पढ़ने के लिए उपयोग की हैं। स्पष्ट रूप से लिखने की अनुमति देने की आवश्यकता है।


1

इसका मतलब है कि आपकी दूरस्थ होस्ट कुंजी बदल दी गई है (हो सकता है कि होस्ट पासवर्ड बदल दें),

आपके टर्मिनल ने रूट उपयोगकर्ता के रूप में इस कमांड को निष्पादित करने का सुझाव दिया

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]

आपको अपने पीसी / सर्वर पर होस्ट सूची से उस होस्ट नाम को निकालना होगा। प्रतिलिपि का सुझाव दिया कि कमांड और रूट उपयोगकर्ता के रूप में निष्पादित करें।

$ sudo su                                                        // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]    // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                           // Exist from root user

ट्राइ अगेन, होप यह काम करता है।


नोट: आपके शेल के आधार पर, आपको वर्ग कोष्ठक से बचना पड़ सकता है \ [और \] या उद्धरणों का उपयोग करें।
फाल्क्स

1

जब पूछा गया:

Are you sure you want to continue connecting (yes/no)?

प्रतिक्रिया के रूप में हाँ टाइप करें

इसी तरह मैंने अपने मुद्दे को हल किया। लेकिन अगर आप सिर्फ एंटर बटन दबाते हैं, तो यह काम नहीं करेगा!


0

आप अपने "git url" का उपयोग जेनकिन्सफाइल में 'https' URL फॉर्मेट में या जहाँ भी चाहें कर सकते हैं।

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'


0

मैं DockerFile के अंदर उसी त्रुटि का सामना कर रहा था जब छवि सार्वजनिक थी। मैंने Dockerfile में थोड़ा संशोधन किया।

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

ऐसा इसलिए होगा क्योंकि git@github.com का उपयोग करते हुए: ... सिंटैक्स समाप्त होता है> SSH का उपयोग क्लोन के लिए, और कंटेनर के अंदर, आपकी निजी कुंजी> उपलब्ध नहीं है। आप इसके बजाय RUN git क्लोन> https://github.com/edenhill/librdkafka.git का उपयोग करना चाहते हैं ।


-1

मेरे पास इसी तरह का मुद्दा था, दुर्भाग्य से मैंने GitExtensions HMI का उपयोग किया और यह भूल गया कि मैंने पासफ़्रेज़ लिखा है। HMI के साथ .... इसे भूल जाओ! जब आप अपनी कुंजी उत्पन्न करते हैं, तो पासफ़्रेज़ दर्ज न करें!


-4

मुझे यह संदेश मिला जब मैंने git cloneएक रेपो की कोशिश की जो मेरा नहीं था। फिक्स कांटा और फिर क्लोन किया गया था।

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