SSH में कठोर RSA कुंजी जाँच कैसे निकालें और यहाँ क्या समस्या है?


42

मेरे पास एक लिनक्स सर्वर है जो जब भी कनेक्ट करता है तो मुझे वह संदेश दिखाता है जिसने SSH होस्ट कुंजी को बदल दिया है:

$ ssh रूट @ होस्ट 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ @ चेतावनी: हवस का अंदाजा लग गया! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@ कोई और भी ऐसा कर सकता है जो किसी को भी उकसा रहा है! अभी आप पर कोई हमला कर सकता है (बीच-बीच में हमला)! यह भी संभव है कि RSA होस्ट कुंजी को अभी बदला गया है। दूरस्थ होस्ट द्वारा भेजी गई RSA कुंजी के लिए फिंगरप्रिंट 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b है। कृपया अपने सिस्टम व्यवस्थापक से संपर्क करें। इस संदेश से छुटकारा पाने के लिए /home/emerson/.ssh/ogn_hosts में सही होस्ट कुंजी जोड़ें। /Home/emerson/.ssh/ogn_hosts:377 में प्रमुख कुंजी

होस्ट 1 के लिए RSA होस्ट कुंजी बदल गई है और आपने सख्त जाँच का अनुरोध किया है। होस्ट कुंजी सत्यापन विफल रहा।

यह मुझे कुछ सेकंड के लिए लॉग इन रखता है और फिर यह कनेक्शन बंद कर देता है।

host1: ~ / .ssh # रिमोट होस्ट host1 से पढ़ें: सहकर्मी द्वारा कनेक्शन रीसेट host1 को बंद कर दिया गया।

क्या किसी को पता है कि क्या हो रहा है और मैं इस समस्या को हल करने के लिए क्या कर सकता हूं?


1
इससे पहले का सवाल है: serverfault.com/questions/2988/…
ड्रू स्टीफंस

जवाबों:


68

कृपया कुछ लोगों द्वारा सुझाई गई पूरी ज्ञात_होस्ट फ़ाइल को नष्ट न करें, इससे चेतावनी का बिंदु पूरी तरह से समाप्त हो जाता है। यह आपको चेतावनी देने के लिए एक सुरक्षा सुविधा है कि मध्य हमले में एक आदमी हो सकता है।

मेरा सुझाव है कि आप पहचानें कि यह क्यों लगता है कि कुछ बदल गया है, सबसे अधिक संभावना है कि एक एसएसएच अपग्रेड ने संभावित सुरक्षा छेद के कारण एन्क्रिप्शन कुंजियों को बदल दिया। फिर आप अपनी ज्ञात_होस्ट फ़ाइल से उस विशिष्ट लाइन को शुद्ध कर सकते हैं:

sed -i 377d ~/.ssh/known_hosts

चेतावनी में बृहदान्त्र के बाद दिखाया गया यह d eletes लाइन 377:

/home/emerson/.ssh/known_hosts:377

वैकल्पिक रूप से आप निम्नलिखित को करके संबंधित कुंजी को हटा सकते हैं

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

कृपया संपूर्ण फ़ाइल को शुद्ध न करें और सुनिश्चित करें कि यह वास्तव में वह मशीन है जिसे आप विशिष्ट कुंजी को शुद्ध करने से पहले कनेक्ट करना चाहते हैं।


एक कुंजी बेमेल के कारण 350 से अधिक सर्वरों को हटाना नहीं है। किसी भी विचार क्यों यह कनेक्शन बंद रहता है?
सेतुकाशी

एक बार जब आप संबंधित ज्ञात_होस्ट रिकॉर्ड को हटा देते हैं तो यह हल नहीं होता है? यदि नहीं, तो आप ssh क्लाइंट को वर्बोज़ मोड में चला सकते हैं और इसे कहीं पर पेस्टीबिन कर सकते हैं।
एडम गिबिन्स

1
यह मशीन को बंद कर रहा है क्योंकि होस्ट कुंजी अमान्य है, जैसा वह कहता है। यदि आप सुरक्षा के बारे में गंभीर हैं, तो आपको यह सुनिश्चित करने के लिए सर्वर के व्यवस्थापक के साथ जांच करने की आवश्यकता है कि वैध कारण के लिए होस्ट कुंजी बदल गई है। यदि हां, तो आप इसे बदल सकते हैं, जैसा कि एडम द्वारा समझाया गया है।
मैथ्यू फ्लैशेन

मैंने आपके सुझाव का पालन किया लेकिन $ sed -i "46 d" ~ / .sh / ज्ञात_होस्ट्स sed: 1: "/User/myusr/.ssh ...": l कमांड के अंत में अतिरिक्त वर्ण इसलिए मैंने इसे मैन्युअल रूप से हटा दिया vim और इसने काम किया। Thanx!
लुइस रामिरेज़-मॉन्टेरोसा

3
एडम का सिंटैक्स लगभग सही है, लेकिन आपको "377" और "डी" के बीच एक स्थान की आवश्यकता है। इसके अलावा, OS X में, ज्ञात होस्ट ~ / .ssh / ज्ञात_होस्ट में स्थित है; एक "की कमी पर ध्यान दें।" फ़ाइल नाम में।
ktappe

27

मुझे लगता है कि यद्यपि यहाँ कुछ उत्तर ओपी के प्रश्न में कार्रवाई के अनुशंसित पाठ्यक्रम को संबोधित करते हैं, लेकिन यह पूरी तरह से प्रश्न का उत्तर नहीं देता है।

प्रश्न में कहा गया है कि SSH में कठोर RSA कुंजी जाँच को कैसे हटाया जाए और यहाँ क्या समस्या है?

यहाँ समस्या यह है, जैसा कि कुछ अन्य लोगों द्वारा सलाह दी जाती है, संभवतः सर्वर के पुनः स्थापित होने (सबसे सामान्य परिदृश्य) के कारण होस्ट में बदलाव। और अनुशंसित समाधान वास्तव में इनलाइन सेड के साथ .ssh / अधिकृत_की फाइल से हटने वाली कुंजी को हटाने के लिए है।

हालाँकि, मैंने किसी भी उत्तर को " SSH में सख्त RSA कुंजी जाँच को कैसे दूर करें " प्रश्न के विशिष्ट भाग को संबोधित नहीं किया ।

आप अपने ssh कॉन्फ़िगरेशन फ़ाइल में StrictHostKey चेकिंग को हटा सकते हैं, जिसे आमतौर पर संग्रहीत किया जाता है ~/.ssh/config

एक उदाहरण होस्ट ब्लॉक नीचे दिया गया है:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

विशेष रूप से जोड़ी गई लाइन आखिरी है StrictHostKeyChecking noजो सिर्फ वही करती है। आपके विशिष्ट परिदृश्य के आधार पर, यह आपके लिए उपयोगी हो सकता है, जैसे कि एक समर्पित सर्वर पर कई वर्चुअलाइज्ड कंटेनरों को चलाना, केवल कुछ ips पर, एक ही आईपी पर दूसरा उदाहरण रोकना और शुरू करना।


3
+1 क्योंकि यह पोस्ट वास्तव में त्रुटि संदेश के सख्त जाँच भाग को संबोधित करती है।
शिबूमी

1
प्रश्न की सामग्री को संबोधित करने के लिए मुझसे भी +1। कारकों के आधार पर करने के लिए और भी कुछ हो सकता है। यह दृष्टिकोण "सख्त" से "कुछ" (मेरी शब्दावली) की मेजबानी की जाँच को नीचा दिखाता है। मेरी स्थिति में जो मुझे साइन इन करने से रोकने की अनुमति के साथ ssh छोड़ दिया क्योंकि जिस तरह से मैं साइन इन करना चाहता था वह पासवर्ड दर्ज करना था, और वह "कुछ" होस्ट चेकिंग द्वारा अक्षम था। तो आपको "UserKnownHostsFile" के रूप में उपयोग करने के लिए आगे और ssh / dev / nsh पर जाना होगा। यह होस्ट चेकिंग को "कोई नहीं" प्रभाव में रखता है और उपरोक्त DIRE WARNINGS लागू होते हैं, इसलिए इसे विश्व स्तर पर या स्थायी रूप से नहीं करें।
कार्डिफ़ स्पेस मैन

यह वास्तव में एक सुरुचिपूर्ण समाधान है। साझा करने के लिए धन्यवाद!
लियोन - हान ली

10

StrictHostKeyChecking को हटाने का एक और तरीका है, जब आपको केवल एक ही सर्वर के लिए यह करने की आवश्यकता होती है:

ssh <server> -o StrictHostKeyChecking=no

आपको लॉग इन करने देगा लेकिन समस्या को स्थायी रूप से ठीक नहीं करेगा।
एंड्रेस कैनेला सेप

जब मैं इसे करता हूं तो मुझे कुंजी जोड़ने का मौका मिलता है, जो तब समस्या को स्थायी रूप से ठीक कर देता है
ग्रेग डौफ्टी

शायद हमारे पास अलग मुद्दा है? मैं एक ऐसे सर्वर से जुड़ रहा हूं जिसके पहले एक अलग आईपी था।
एंड्रेस कैनेला सेप

यदि आपके पास एक सर्वर है जिसका डेटा बदल गया है, तो आपको इसे अपनी ज्ञात होस्ट फ़ाइल से हटाने की आवश्यकता है (पहली बार स्थापित करने के बाद कि परिवर्तन सही है), और इसकी नई जानकारी जोड़ें। यदि आपके पास एक नया सर्वर है, तो -o आपको सर्वर से जुड़ने देगा और इसकी जानकारी जोड़ देगा।
ग्रेग डौफ्टी

मुझे लगता है कि वास्तव में यह एक अच्छा अभ्यास है कि स्ट्रिक्टहॉस्टकेकचिंग को अपने वाईईएस में सेट करें और केवल इस स्विच का उपयोग करें जब आप जानते हैं कि आप एक नए सर्वर से कनेक्ट कर रहे हैं या अपने आप को एक पुराने सर्वर पर चाबियाँ बदल दी हैं।
मोहाक

5

सबसे पहले, यह आपकी मशीन है? क्या आपने जानबूझकर मेजबान कुंजी को बदल दिया है? यदि नहीं, तो मुझे बहुत चिंता होगी कि कुछ ने उस डेटा को बदल दिया है।

दूसरे, ssh डिबगिंग को चालू करें,

ssh -vvv user@host

और देखें कि जो आपको बताता है, आप जिस सर्वर पर सुराग के लिए कनेक्ट करने का प्रयास कर रहे हैं, उस पर / var / log / Secure और / var / log / संदेश देखने की कोशिश करें, sshd अच्छा त्रुटि संदेश देता है।

तीसरा, क्या यह मशीन इंटरनेट से जुड़ी है? क्या आपको वास्तव में रूट लॉगिन की अनुमति देनी चाहिए?


1
रूट लॉगिन टिप्पणी के लिए +1
फहद सदा

इस त्रुटि के होने के लिए सभी लक्ष्य मशीन को पुन: उपयोग में लाया जा रहा है। यदि आप एक लक्ष्य से जुड़ रहे हैं जो आपके DMZ के पक्ष में है, तो एक MitM हमला बहुत संभावना नहीं है।
ktappe

3

आप ऐसा इसलिए कर रहे हैं क्योंकि कुछ बदल गया है (जैसे कि नया एनआईसी, नया आईपी, सर्वर सॉफ्टवेयर पर बदलाव आदि)। SSH होस्ट कुंजी सुरक्षा पर सुरक्षा फोकस का एक अच्छा लेख है ।

$HOME/.ssh/known_hostsफ़ाइल को संपादित करके, सर्वर से कुंजी (SFTP या समान का उपयोग करके) निकालें , और अगले कनेक्शन पर नया स्वीकार करें।

आपका कनेक्शन StrictHostKeyChecking सेटिंग के कारण गिराया जा सकता है। इसी मुद्दे के लिए इस धागे को देखें ।


2
Noooo, कृपया यह मत करो। यह पूरी तरह से सभी सुरक्षा प्रदान करता है जो यह सुविधा प्रदान करता है। कृपया केवल उस विशिष्ट कुंजी को हटा दें जो बदल गई है, सभी ज्ञात_होस्ट नहीं।
एडम गिबिन्स

5
मैंने ज्ञात_होस्ट फ़ाइल को हटाने की अनुशंसा नहीं की थी, मैंने इसे संपादित करने और उससे चाबी निकालने की सिफारिश की थी।

ऊफ, सॉरी, गलत।
एडम गिबिन्स

2
यह संदेश निश्चित रूप से एक नए आईपी पते से शुरू नहीं किया जा सकता है, एक नए एनआईसी द्वारा बहुत कम। एडम गिबिन्स का सही उत्तर देखें।
bortzmeyer

1
इससे पहले कि आप मतदान करें (मैं लोगों को इस बात से बहुत खुश महसूस कर रहा हूं), अपना शोध करें। इस सिक्योरिटी फोकस आर्टिकल, securityfocus.com/infocus/1806 पर पढ़ें । मैं इसे थोड़ा उद्धृत करता हूं: "एक मेजबान कुंजी क्यों बदल सकती है? जिस मशीन से आप कनेक्ट करना चाहते हैं उसे एक अलग DNS नाम या आईपी पते पर स्थानांतरित कर दिया गया है, या इसे पूरी तरह से एक नया द्वारा बदल दिया गया है।" यदि कोई उत्तर बुरी तरह से गलत है, तो कृपया सुधार का मौका दें। आखिरकार, यह एक विकी है।

3

जैसा कि 'होस्ट' [मोटे तौर पर परिभाषित किया गया है, यह आपके द्वारा पहले से कनेक्ट किए गए आईपी पते के साथ एक पूरी तरह से अलग कंप्यूटर के लिए एक पुनर्स्थापना / मल्टीबूट से सब कुछ हो सकता है, उदाहरण के लिए] ssh क्लाइंट को बदला हुआ प्रतीत होता है, यह आपको दे रहा है। त्रुटि।

यह सख्त जाँच बंद करने के लिए अनावश्यक है, न ही सहेजे गए कुंजी के थोक विलोपन समझदार है।

किसी विशेष होस्टनाम या आईपी पते के लिए ज्ञात_होस्ट में सूचीबद्ध दो अलग-अलग कुंजियाँ होना काफी संभव है; क्या आपको लगता है कि आपको लगता है कि वर्तमान में ज्ञात_होस्ट में संग्रहीत 'पुरानी' कुंजी की आवश्यकता हो सकती है के अनुसार 2 विकल्प दिए गए हैं

या तो ओपी के लिए ज्ञात_होस्ट्स के l377 पर, उस विशेष कुंजी को हटा दें, जो दोनों को रखें या दोनों को रखें

दोनों को रखने का सबसे सरल तरीका, ज्ञात_होस्ट में कुंजी को हटाने से बचना है

  1. ज्ञात रूप से ज्ञात_होस्ट्स [@ l377] में संदर्भित 'पुरानी' प्रविष्टि की शुरुआत में # जोड़ने के लिए ज्ञात_होस्ट को संपादित करें
  2. कनेक्ट [ssh होस्ट करने के लिए], नई कुंजी 'स्वचालित रूप से' जोड़ने के लिए संकेत के लिए सहमत
  3. फिर # हटाने के लिए know_hosts को फिर से संपादित करें

पर अधिक जवाब "known_hosts में सही होस्ट कुंजी जोड़ें" / होस्टनाम प्रति कई ssh मेजबान कुंजी?


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