क्या SSH की ज्ञात_होस्ट फ़ाइल से किसी विशेष होस्ट कुंजी को निकालना संभव है?


309

क्या SSH की ज्ञात_होस्ट फ़ाइल से किसी विशेष होस्ट कुंजी को निकालना संभव है?

मैं आमतौर पर पूरी known_hostsफाइल को डिलीट कर देता हूं, जिसे करने में मुझे कोई समस्या नहीं है, लेकिन सिर्फ जिज्ञासा से, क्या सिर्फ एक प्रविष्टि को हटाना संभव है?

मैंने known_hostsफ़ाइल को खोला , लेकिन मैं इसकी सामग्री को समझने के लिए संघर्ष कर रहा हूं।

नीचे वह संदेश है जिसका मैंने सामना किया, जिससे मुझे यह सवाल पूछना पड़ा:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.

जवाबों:


514

ज्ञात_होस्ट से प्रविष्टियाँ निकालने के लिए इस कमांड का उपयोग करें:

ssh-keygen -R hostname

21
यह एक आईपी पते के साथ भी काम करता है। उदाहरण के लिए, मेरे पास मेरे वेब सर्वर के लिए DNS होस्ट शॉर्टकट है। कस्टम होस्टनाम और IP पते की कुंजियों के बीच एक टकराव को दूर करने के लिए, मुझे दोनों के लिए प्रविष्टियाँ निकालनी थीं। ssh-keygen -R xxx.xxx.xxx.xxx।
स्ट्रेंजएमेंट

जैसा कि @StrangeElement कहता है, कभी-कभी ऐसा माना जाता है कि आपको होस्टनाम के अलावा आईपी होस्ट भी हटाना होगा।
गोंजालो काओ

4
इसके अलावा, यह स्वचालित रूप से एक बैकअप रखता है (मेरे ओएक्सएक्स मशीन पर:, Original contents retained as /Users/nha/.ssh/known_hosts.oldयह मानते हुए कि यह उबंटू के लिए समान है)।
एनएच

17
इसके अलावा, यदि आप गैर-मानक ssh पोर्ट का उपयोग कर रहे हैं, तो इस प्रारूप का उपयोग करेंssh-keygen -R [ssh.sssshh.com]:1234
Shiji.J

इस सवाल के लिए सबसे अच्छा जवाब। एक आकर्षण की तरह काम करता है
बदनाम

32

हां, आप केवल एक कुंजी निकाल सकते हैं। बस इसे एक संपादक में खोलें और आपत्तिजनक लाइन को हटा दें। त्रुटि संदेश में बृहदान्त्र के बाद की संख्या रेखा संख्या है, इसलिए आपके उदाहरण में पंक्ति 1 को हटाने की रेखा है ..


1
मुझे नहीं पता था कि यह लाइन नंबर की पहचान करता है, जो अविश्वसनीय रूप से सहायक है।
डेल्ट्री

19

मैंने हाल ही में होस्ट की का उपयोग करना शुरू किया है, लेकिन जब मैंने उनके साथ गड़बड़ की है तो यह आम तौर पर प्रति पंक्ति एक कुंजी है ताकि फ़ाइल का बैकअप लें और उन्हें एक बार में हटा दें जब तक कि आपको सही एक न मिल जाए। फिर दूसरों को वापस जोड़ें। इसे करने के लिए एक लंबा रास्ता तय करना चाहिए, लेकिन काम करना चाहिए।

उस त्रुटि के आधार पर भी, और बिना किसी विचार के, कभी भी, यह उस फ़ाइल की पहली होस्ट कुंजी हो सकती है जो समस्या है इसलिए फ़ाइल को vim के साथ खोलें

vim ~/.ssh/known_hosts

और मारा

dd

फिर इसे सहेजें।


आप का उपयोग कर सकते हैं: लाइन नंबर दिखाने के लिए विम में सेट करें। वैसे भी Takkat उत्तर सबसे अच्छा है।
जेवियर रिवेरा

मैं मानता हूं कि आप ऐसा नहीं कर सकते। भविष्य में इसका उपयोग करने जा रहा हूं। मैं अर्थ के लिए लाइन संख्या सेटिंग देखने के लिए अर्थ रखा। धन्यवाद।
बडी लिंडसे

3

Ssh-keygen -R होस्टनाम का उपयोग करना हमेशा काम नहीं करेगा। यदि आपके पास SSH का एक नया संस्करण है जो ssh- एजेंट के अपहरण को रोकने के लिए होस्टनामों को "छुपा" रहा है, तो जाहिर तौर पर ssh-keygen होस्टनाम को अनहाइज करने में असमर्थ है।

उदाहरण के लिए, मेरे पास बिल्ड-नोड -01 नामक एक मेजबान है और मैंने इसे कनेक्ट किया है और कुंजी को स्वीकार किया है। मैं फिर इसे खरोंच से पुनर्निर्माण करता हूं, एक नया होस्ट फ़िंगरप्रिंट प्राप्त करता हूं और मैं फिर से कनेक्ट करने का प्रयास करता हूं, मुझे एक चेतावनी मिलेगी कि लाइन एक्स (3 का कहना है) पर एक संघर्ष है। मैं दौड़ता हूं ssh-keygen -R hostname, लेकिन अगली बार जब मैं कनेक्ट करने की कोशिश करता हूं, तब भी मुझे चेतावनी मिलती है कि संघर्ष है। मैंने केवल यह पता लगाने के लिए फ़ाइल की जांच की कि होस्टनाम को रीड किया गया था और [1] Bu4Ch@R@4D0M57uFFपढ़ने योग्य होस्टनाम के बजाय दिखाया गया था ।

इस मामले में, हटाए गए होस्ट को सफलतापूर्वक प्राप्त करने का एकमात्र तरीका उपयोग करना था

sed -i 'xd' ~/.ssh/known_hosts

इस सीड को एक कदम आगे ले जाने के लिए, आप ज्ञात लाइन का बैकअप बनाने की इच्छा कर सकते हैं यदि आप गलत लाइन को हटाते हैं, तो इस स्थिति में उसके साथ बैकअप बनाने के लिए -iak (या किसी एक्सटेंशन) विकल्प जोड़ें। विस्तार। Ssh-keygen का उपयोग यह स्वचालित रूप से करता है।

sed -i.bak 'xd' ~/.ssh/known_hosts

5
यह सही नहीं है। ssh-keygen -R {hostname}तब भी काम करेगा, जब होस्टनाम 'छिपा ’(हैशेड) हो। फिर भी, हाँ, संख्या द्वारा प्रविष्टि को हटा सकते हैं (उदाहरण के लिए, 10 वीं प्रविष्टि sed -i.bak 10d ~/.ssh/known_hosts), लेकिन यह आमतौर पर आवश्यक नहीं है। यह हो सकता है कि एक गैर-मानक बंदरगाह का उपयोग किया गया था, जिस स्थिति में, आपको कमांड को नोट करना होगा (नोट उद्धरण):ssh-keygen -R '[hostname]:2222'
michael

@Michael_n को जानने के लिए अच्छा है, यह बहुत संभावना है कि यह एक गैर-मानक बंदरगाह था जो प्रविष्टि को हटाने की मेरी क्षमता को प्रभावित कर रहा था। मुझे यह भी ध्यान रखना चाहिए कि यदि आपने एक मेजबान के लिए कई उंगलियों के निशान स्वीकार किए हैं, तो मुझे यकीन नहीं है कि यह एक बार में सभी प्रविष्टियों को हटा देता है, या एक समय में सिर्फ एक।
ड्रैगन 788

1

बस एक और साफ और आसान जवाब साझा करने के लिए मैं अभी मिला। होस्टनाम निकालना मेरे लिए बाहर है, क्योंकि ज्ञात_होस्ट फ़ाइल हेजेड है। हालाँकि, मैं त्रुटि संदेश में लाइन संख्या के आधार पर होस्ट प्रविष्टि को मैन्युअल रूप से संपादित करता हूं। जैसा कि पहले माइक स्कॉट ने नोट किया था, आक्रामक होस्टनाम लाइन नंबर त्रुटि संदेश में है।

या, मैं यह कर सकता हूं। यहाँ से: ssh ज्ञात_होस्ट फ़ाइल में आपत्तिजनक कुंजी को कैसे ठीक करें

मुझे यह क्ली मैजिक थोड़ा अच्छा लगा

sed -i 'xd' ~/.ssh/known_hosts

एक्स को लाइन नंबर, और वॉइला से बदलें। अगर वह सेड काम नहीं करेगा तो वह एक शानदार जवाब भी देता है।


0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

इस मामले में, 10.20.120.211 वह होस्ट है जिसे मैं अपनी ज्ञात_होस्ट फ़ाइल से हटाना चाहता हूं, सुनिश्चित करें कि आप विशेष वर्ण (जैसे) से बच जाते हैं।


IP पते और होस्टनाम अब ज्ञात होस्ट फ़ाइल में संग्रहीत शब्दशः (स्पष्ट पाठ) नहीं हैं, इसलिए यह काम नहीं करेगा। एक का उपयोग करना चाहिए ssh-keygen -R ...(अधिमानतः); या, sedहटाने के लिए विशिष्ट लाइन नंबर के साथ। इसके अलावा, sedइन-प्लेस, -i' option; e.g., 10-लाइन को हटाने के लिए sed -i.bak 10d ~ / .ssh / ज्ञात_होस्टेस का उपयोग करें , और (वैकल्पिक रूप से) एक बैकअप फ़ाइल में मूल प्रत्यय रखें .bak
माइकल

0

आप इसे अपडेट करके विशेष होस्ट को हटाने से बच सकते हैं:

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

इस तरह आपको मेजबान से दोबारा जुड़ने की जरूरत नहीं है।

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