XX.XXX.XX.XX के साथ बातचीत करने में असमर्थ: कोई मेल होस्ट कुंजी प्रकार नहीं मिला। उनकी पेशकश: ssh-dss


110

मैं अपने वेब होस्ट पर एक git रिपॉजिटरी बनाने की कोशिश कर रहा हूं और इसे अपने कंप्यूटर पर क्लोन कर रहा हूं। यहाँ मैंने क्या किया है:

  1. मैंने रिमोट सर्वर पर एक रिपॉजिटरी बनाई।
  2. मैं एक कुंजी युग्म उत्पन्न: ssh-keygen -t dsa
  3. मैंने ssh-agent में अपनी कुंजी जोड़ी।
  4. मैंने सर्वर सार्वजनिक कुंजी में कॉपी किया ~/.ssh

और फिर, कमांड चलाने के प्रयास के बाद git clone ssh://user@host/path-to-repository, मुझे एक त्रुटि मिलती है:

XX.XXX.XX.XX के साथ बातचीत करने में असमर्थ: कोई मिलान होस्ट कुंजी प्रकार नहीं मिला। उनका प्रस्ताव: ssh-dss
घातक: दूरस्थ रिपॉजिटरी से नहीं पढ़ सका।
कृपया सुनिश्चित करें कि आपके पास सही एक्सेस अधिकार हैं और रिपॉजिटरी मौजूद है।

इसका क्या मतलब है?


जवाबों:


171

हाल ही में खोला गया संस्करण डिफ़ॉल्ट रूप से डीएसए कुंजियों को हटा दिया गया है। कुछ उचित होस्ट कुंजी जोड़ने के लिए आपको अपने GIT प्रदाता को सुझाव देना चाहिए। केवल डीएसए पर भरोसा करना एक अच्छा विचार नहीं है।

वर्कअराउंड के रूप में, आपको अपने sshक्लाइंट को यह बताना होगा कि आप डीएसए होस्ट कीज़ को स्वीकार करना चाहते हैं, जैसा कि विरासत के उपयोग के लिए आधिकारिक दस्तावेज में वर्णित है । आपके पास कुछ संभावनाएं हैं, लेकिन मैं इन पंक्तियों को आपकी ~/.ssh/configफ़ाइल में जोड़ने की सलाह देता हूं :

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

GIT_SSHइन विकल्पों को निर्दिष्ट करने के लिए पर्यावरण चर का उपयोग करने की अन्य संभावना है :

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
अब इसने होस्ट के नाम को निर्दिष्ट किए बिना काम किया है, बस HostkeyAlgorithms +ssh-dss। धन्यवाद।
जियोनीनीड्स

1
@giovannipds यह निश्चित रूप से आपके द्वारा कनेक्ट किए जा रहे दूरस्थ होस्ट की आवश्यकता है। @ डाउनवोटर्स डाउनवोट की व्याख्या करना अच्छा होगा।
जकूज़ी

@Jakuje माफ करना, मैंने गलत क्लिक किया है, और तुरंत बदलने की असंभवता के कारण, मैं अपने उत्तर को अपडेट नहीं कर सका।
जियोनीनिड्स

1
@Jakuje मैंने पहले ही अपना वोट अपडेट कर दिया है, बस आपको बताने के लिए। =)
giovannipds

यदि आपकी .sh निर्देशिका में ऐसी कोई फ़ाइल नहीं है, तो "config" नाम का एक खाली पाठ फ़ाइल करेगा।
RMorrisey

78

आप -oHostKeyAlgorithms=+ssh-dssअपनी ssh लाइन में भी जोड़ सकते हैं :

ssh -oHostKeyAlgorithms=+ssh-dss user@host

यह सबसे तेज़ समाधान +1 है क्योंकि यह उस होस्ट के लिए समस्या को स्थायी रूप से ठीक भी करता है। लंबे समय तक चलने के लिए एक और सुझाव यह है कि यदि संभव हो तो मेजबान प्रणाली को अपने SSH डेमॉन को अपग्रेड करना चाहिए क्योंकि ऐसा प्रतीत होता है कि DSS इसे बहुत सुरक्षित नहीं माना जाता है।
आरिब सो यासिर

20

मेरे लिए यह काम किया: (में जोड़ा गया .ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

दूसरा विकल्प समस्या से संबंधित नहीं है और पहले ही मेरे उत्तर में उल्लिखित है।
जकूजी

होस्ट-होस्ट मेरे काम नहीं आया, बशर्ते आपका होस्ट उस होस्ट का नाम हो जो मैं (क्लाइंट) से ssh कमांड चला रहा हूं। लेकिन होस्ट * ने मेरे लिए काम किया।
क्रिश्चु

2
@ क्रिसचू नो, yuor-hostवह होस्ट है जिसके sshखिलाफ आप दौड़ रहे हैं । सभी मेजबानों के लिए असुरक्षित डिफ़ॉल्ट सेट करना हमेशा बुरा विचार है।
जकूजी

10

यदि आप मेरे जैसे हैं, और इस सुरक्षा छेद प्रणाली या उपयोगकर्ता-व्यापी नहीं बनायेंगे, तो आप उन git repos में एक विन्यास विकल्प जोड़ सकते हैं, जिन्हें इस आदेश को उन repos में चलाकर इसकी आवश्यकता है। (नोट केवल git संस्करण के साथ काम करता है> = 2.10, 2016-09-04 को जारी)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

यह केवल हालांकि रेपो सेटअप के बाद काम करता है। यदि आप मैन्युअल रूप से रिमोट जोड़ना आसान नहीं हैं (और सिर्फ क्लोन करना चाहते हैं) तो आप क्लोन को इस तरह चला सकते हैं:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

फिर इसे स्थायी करने के लिए पहला कमांड चलाएँ।

यदि आपके पास नवीनतम नहीं है, और फिर भी मैं जितना संभव हो सके उतना छेद रखना चाहूंगा, जिसे मैं लगाने की सलाह देता हूं

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

एक फ़ाइल में कहीं, कहते हैं git_ssh_allow_dsa_keys.sh, और sourceजरूरत पड़ने पर इसे अंतर्ग्रहण करते हैं।


3

मैं सर्वर साइड के समाधान के साथ थोड़ा सहयोग करना चाहता हूं। इसलिए, सर्वर कह रहा है कि यह डीएसए का समर्थन नहीं करता है, ऐसा इसलिए है क्योंकि ओपनशेड क्लाइंट इसे डिफ़ॉल्ट रूप से सक्रिय नहीं करता है :

OpenSSH 7.0 और अधिक से अधिक इसी तरह ssh-dss (DSA) सार्वजनिक कुंजी एल्गोरिथ्म को अक्षम करें। यह बहुत कमजोर है और हम इसके उपयोग के खिलाफ सलाह देते हैं।

इसलिए, सर्वर साइड में इसे ठीक करने के लिए मुझे आरएसए ओ ईसीडीएसए जैसे अन्य कुंजी एल्गोरिदम को सक्रिय करना चाहिए। मैं सिर्फ एक लैन में एक सर्वर के साथ यह समस्या थी। मैं निम्नलिखित सुझाव देता हूं:

ओपनश को अपडेट करें:

yum update openssh-server

Sshd_config.rpmnew होने पर sshd_config में नए कॉन्फ़िगरेशन मर्ज करें।

सत्यापित करें कि / etc / ssh / पर होस्ट कीज़ हैं। यदि नए नहीं उत्पन्न होते हैं, तो देखें man ssh-keygen

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

HostKey कॉन्फ़िगरेशन में / etc / ssh / sshd_config में सत्यापित करें। यह आरएसए और ईसीडीएसए के कॉन्फ़िगरेशन को अनुमति देना चाहिए। (यदि उन सभी को डिफ़ॉल्ट रूप से टिप्पणी की जाती है तो यह बहुत RSA की अनुमति देगा, man sshd_configHostKey के भाग में देखें)।

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

क्लाइंट पक्ष के लिए, ssh के लिए एक कुंजी बनाएं (प्रश्न में डीएसए की तरह नहीं) बस ऐसा करके:

ssh-keygen

इसके बाद, क्योंकि ssh-dss (DSA) से अधिक विकल्प हैं, क्लाइंट ओपनश (> = v7) को आरएसए या बेहतर एल्गोरिदम से जुड़ना चाहिए।

यहाँ एक और अच्छा लेख।

यह मेरा पहला प्रश्न है, मैं सुझावों का स्वागत करता हूं: डी।


1

एक से अधिक एल्गोरिदम को कैसे निर्दिष्ट किया जाएगा? मैं पूछता हूँ क्योंकि git अभी मेरे काम के लैपटॉप पर अपडेट किया गया है, (विंडोज 10, विंडोज बिल्ड के लिए आधिकारिक Git का उपयोग करके), और मुझे यह त्रुटि तब मिली जब मैंने अपने Azure DevOps रिमोट में एक परियोजना शाखा को धक्का देने की कोशिश की। मैंने पुश-अप-अपस्ट्रीम और पुश करने की कोशिश की:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

तो उपरोक्त सुझावों को कैसे लागू किया जाएगा? (एक त्वरित कार्य के रूप में, मैंने समूह 14 के साथ @ गोल्वोक के समाधान का उपयोग किया और यह काम किया, लेकिन मुझे वास्तव में नहीं पता है कि 1 या 14 बेहतर है, आदि)


-3

आप या तो उपरोक्त दृष्टिकोण का पालन करते हैं या यह एक

.Ssh निर्देशिका में कॉन्फ़िग फ़ाइल बनाएँ और इन लाइन को जोड़ें।

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

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