अस्थायी रूप से मेरी `~ / .ssh / ज्ञात_होस्ट` फ़ाइल को अनदेखा करें?


48

क्या मेरी ~/.ssh/known_hostsफ़ाइल को अस्थायी रूप से अनदेखा करने का कोई तरीका है ?

mbp:~ alexus$ ssh 10.52.11.171
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Please contact your system administrator.
Add correct host key in /Users/alexus/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/alexus/.ssh/known_hosts:155
RSA host key for 10.52.11.171 has changed and you have requested strict checking.
Host key verification failed.
mbp:~ alexus$ 

ध्यान दें:

.. कुछ उत्तर (ओं) / टिप्पणी (ओं) से मुझे पता चलता है कि मेरा सवाल थोड़ा भ्रामक है, इसलिए यह अपेक्षित व्यवहार है), इसलिए यह सामान्य है (मेरे मामले में) इसके पीछे एक वैध कारण है कि मैं क्यों "इसे अनदेखा करें" देखना चाहते हैं)


9
आप गलत सवाल पूछ रहे हैं। आपको समस्या को "अनदेखा" नहीं करना चाहिए; आपको पता लगाना चाहिए कि क्या चल रहा है और इसे हल करें।
माइकल हैम्पटन

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

10
@Michael Hampton - मुझे यह सब समय मिलता है क्योंकि VMware और वर्चुअलबॉक्स मेहमानों के लिए आईपी पते रीसायकल करता है। मेरे लिए, यह सही प्रश्न है :)

1
FWIW मैं इस उत्तर को खोजता रहता हूं क्योंकि मेरे LAN में एक सिस्टम है जहां मैं स्टार्टअप के दौरान डिस्क एन्क्रिप्शन पासवर्ड दर्ज करने के लिए एक ड्रॉपबियर (एक अलग होस्ट कुंजी के साथ) का उपयोग करता हूं।
झूलन

1
@jww यह आपके परिदृश्य के लिए गलत प्रश्न / समाधान है। इसके बजाय आपको IP पते को अनदेखा करने के लिए SSH को कॉन्फ़िगर करना चाहिए लेकिन फिर भी होस्ट कुंजी की जांच करें। उदाहरण के लिए यहाँ
जॉन बेंटले

जवाबों:


56

आप पल-पल की ssh -o StrictHostKeyChecking=noजाँच बंद करने के लिए उपयोग कर सकते हैं known_hosts। लेकिन मैं इसके खिलाफ सलाह दूंगा। आपको वास्तव में जांचना चाहिए कि मेजबान कुंजी क्यों बदल गई है।

एक अन्य विकल्प यह है ~/.ssh/configकि प्रश्न में होस्ट के लिए अपनी विशिष्ट प्रविष्टि को जोड़ा जाए । यदि आपके पास एक निश्चित होस्ट है, जो हर बार रिबूट होता है और यह एक दिन में कई बार वैध कारण से रीबूट हो जाता है, तो यह मान्य दृष्टिकोण हो सकता है।

Host <your problematic host>
  StrictHostKeyChecking no

यह अपेक्षित व्यवहार है) इसलिए यह सामान्य है (मेरे मामले में)
एलेक्सिस

1
@alexus यदि यह "अपेक्षित" है, तो आप विकल्प को एक विशेष होस्टनाम / आईपी पर लागू कर सकते हैं जिसके लिए आप यह होने की उम्मीद करते हैं।
चिरलीस-स्ट्राइक-

1
@alexus और याद रखें कि यदि आप ऐसा करते हैं, तो आप बहुत सारी सुरक्षा खो देते हैं जो ssh प्रदान करता है। हो सकता है कि आप टेलनेट का इस्तेमाल कर रहे हों, क्योंकि यह किसी के लिए तुच्छ हो सकता है, जो आपके लिए एमआइटीएम है और आपके सभी ट्रैफ़िक को कैप्चर करेगा।
माइकल हैम्पटन

1
यह अब और नहीं काम करता है (कम से कम OpenSSH_5.3p1 के लिए)
draeath

-o StrictHostKeyChecking=noएक पासवर्ड के साथ लॉग इन करने की क्षमता को हटाता है। क्या इसके लिए एक झंडे की कमी उपयोगकर्ता के व्यवहार को मजबूर करने की अनुमति देने के यूनिक्स सिद्धांतों के खिलाफ सीधे नहीं जाती है? मैं वर्तमान में स्थानीय आईपी के साथ एक स्थानीय मशीन में प्रवेश करने की कोशिश कर रहा हूं। मेजबान कुंजी बदल गई क्योंकि मैंने कहा कि मशीन में सुधार हुआ। यहां सब कुछ समझ में आता है और परिस्थितियों के तहत कुछ भी सुरक्षा जोखिम नहीं है।
वौफुन्हापी

31

POSIX वातावरण में अपनी ज्ञात होस्ट फ़ाइल को पूरी तरह से अनदेखा करने के लिए, GlobalKnownHostsFileऔर इसके लिए UserKnownHostsFileविकल्प सेट करें /dev/null:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@host

StrictHostKeyChecking=noविकल्प सेट करने से आप कनेक्ट कर पाएंगे लेकिन SSH अभी भी चेतावनी देगा :

ssh -o StrictHostKeyChecking=no user@host

जैसा कि अन्य ने उल्लेख किया है, अंतर्निहित मुद्दे को संबोधित करना बेहतर है। आप उदाहरण के लिए, मेजबानों को सत्यापित करने के लिए SSH प्रमाणपत्र प्रमाणीकरण पर विचार कर सकते हैं ।


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

मैं एक छोटे से यहाँ भ्रमित कर रहा हूँ: क्या आप नहीं करना चाहिए भी उपयोग करने -o StrictHostKeyChecking=no के अलावा-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null विकल्प - के अंतिम जवाब के लिए?: ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host?
गेब्रियल स्टेपल्स


5

यदि आपने सर्वर को फिर से इंस्टॉल किया है और इसलिए पहचान बदल गई है, तो आपको केवल निर्दिष्ट लाइन 155 को हटा देना चाहिए /Users/alexus/.ssh/known_hostsऔर आगे बढ़ जाना चाहिए।

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

10.52.11.171 server1
10.52.11.171 server2

और तब ssh server1सबनेट 1 से ssh server2कनेक्ट होने पर और सबनेट 2 से कनेक्ट होने पर उपयोग करें। इस तरह, दोनों सर्वरों में अलग-अलग होस्टेक हो सकते हैं।


क्या होगा यदि आप दो निजी नेटवर्क के बीच स्विच करते हैं और दो समान आईपी से कनेक्ट होते हैं?
एलेक्सिस

1
मैंने अपना उत्तर संपादित कर दिया है।
etagenklo

2
@alexus तो आपको IPv6 की आवश्यकता है :) लेकिन यह आपके मूल प्रश्न में उपयोगी जानकारी होगी।
माइकल हैम्पटन

2

-o StrictHostKeyChecking=no यदि होस्ट पहले से ही ज्ञात_होस्ट फ़ाइल में मौजूद नहीं है तो काम करता है।

मुझे लगता है कि यह क्लीनर (कोई चेतावनी नहीं) है, अगर आप vm क्लोनिंग के कारण मेजबान कुंजी को बदलने की उम्मीद करते हैं, तो इस तरह के मेजबान की अनदेखी को लागू करने के लिए:

# Handle possible SSH key changes
host_key=$(ssh-keyscan -t rsa ${host_ip})
grep "${host_key}" ~/.ssh/known_hosts >/dev/null || {
    ssh-keygen -R ${host_ip}
    echo ${host_key} >>  ~/.ssh/known_hosts
}

# connect as normal way
ssh root@${host_ip} "hostname"

2

कुछ लोगों का कहना है कि यह सही नहीं है, आप ऐसा न करें और ऐसा न करें, लेकिन मुझे इसके लिए एम्बेडेड उपकरणों के जोड़े का बार-बार परीक्षण करने की भी आवश्यकता है। आपको अक्षम करने की आवश्यकता है StrictHostKeyChecking=no, यह सही है, लेकिन ज्ञात होस्ट फ़ाइल को भी रीसेट करना है /dev/null। यहां ऑटोलॉगिन के साथ और psदूरस्थ डिवाइस पर एक छूट है।

sshpass -p pass ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host 'ps ax'

-2

अपने सभी सर्वर में लॉग इन करें, (और अगर RedHat) rm -f /etc/ssh/ssh_host_*और फिर SSHD को पुनरारंभ करें।

यह नए SSH होस्ट कुंजी बनाएगा जिन्हें अनदेखा करने की आवश्यकता नहीं है।

मैं केवल एक उदाहरण के बारे में सोच सकता हूं जहां एसएसएच कुंजी कई सर्वरों पर क्लोन की गई है, न केवल वांछित है, बल्कि किसी भी चेतावनी को नहीं फेंकती है। एक ए रिकॉर्ड के गुणक। A रिकॉर्ड वाले सभी होस्ट के पास एक ही कुंजी है।


6
यह उत्तर गलत है। क्लाइंट पर फिंगरप्रिंट स्थानीय है।
89c3b1b8-b1ae-11e6-b842-48d705
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.