SSH के लिए ज्ञात_होस्ट्स में hostkey को न जोड़ें


111

मैं SSH के माध्यम से एक होस्ट से कनेक्ट करना चाहता हूं, लेकिन मैं नहीं चाहता कि होस्टनाम को मेरे साथ जोड़ा जाए ~/.ssh/known_hosts

मैं उसे कैसे कर सकता हूँ?

जवाबों:


99
-o "UserKnownHostsFile /dev/null"

कार्य करना चाहिए।


3
इरादा के अनुसार काम करता है, लेकिन यह हमेशा रिपोर्ट करेगा: "चेतावनी: स्थायी रूप से 'होस्टनाम, आईपी' (आरएसए) को ज्ञात मेजबानों की सूची में जोड़ा गया है।" मैंने बनाया कि साथ चले जाओ: 2> और 1 | grep -v "^Warning: Permanently added"
गिलौम बौडर्यू

3
add -o "LogLevel ERROR" और यह चेतावनियों के साथ कोई शिकायत नहीं करेगा
जॉन

1
नोट: उस संदेश को दबाने का अनुरोध "चेतावनी: ज्ञात होस्टों की सूची में स्थायी रूप से जोड़ा गया 'hostname, ip' (RSA)।" को बनाए रखने वालों को सूचित किया गया था Bugzilla.mindrot.org/show_bug.cgi?id=2413
बेन क्रीसी

2
पाइपिंग को grepस्टडआउट और स्टेडर में विलय करना होगा; बाहर निकलने की स्थिति भी बदल सकती है। यदि उपयोग किया जाता है bash, तो संदेश से छुटकारा पाने के लिए प्रक्रिया प्रतिस्थापन का उपयोग करना बेहतर होगा ssh 2> >( egrep >&2 -v '^Warning: Permanently added') -o "UserKnownHostsFile /dev/null" [...]:। यह पाइप से बच जाएगा और इस प्रकार निकास स्थिति से निपटने में संबंधित परिवर्तन।
एलेक्स ओ

1
@ जॉन इन टिप्पणियों में अन्य तरीकों में से एक का उपयोग करना बेहतर है, अन्यथा आप अन्य छिपाने की क्षमता के कारण सुरक्षा दोष का परिचय दे रहे हैं, असंबंधित चेतावनी
जॉन बेंटले

97

यदि आप यह व्यवहार चाहते हैं क्योंकि आप क्लाउड सर्वर (AWS EC2, Rackspace CloudServers इत्यादि) के साथ काम कर रहे हैं या आप लगातार Vagrant में नई छवियों का प्रावधान कर रहे हैं, तो आप बैश उपनाम या अधिक विकल्पों को जोड़ने के बजाय अपने SSH कॉन्फ़िगरेशन को अपडेट करना चाह सकते हैं। कमांड लाइन।

कुछ जोड़ने पर विचार करें:

Host *.mydomain.com 
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  User foo
  LogLevel QUIET
  • जितना संभव हो उतना सुरक्षित रूप से होस्ट के लिए रेगेक्स का उपयोग करें।
  • LogLevel को QUIET पर सेट करने से उस चेतावनी को रखा जाएगा जिसे दिखाने से गिलोयूम ने उल्लेख किया है

आपको वास्तव में StrictHostKeyChecking को पूरी तरह से अक्षम नहीं करने का प्रयास करना चाहिए, इसलिए क्‍लार्क का जवाब क्लाउड सर्वर के साथ काम करने के लिए एक महान समझौता है।
एलेक्स रिकारे

यह मेरे लिए बहुत उपयोगी साबित हुआ क्योंकि मैं वैग्रांत के खिलाफ शिपिट (एक जावास्क्रिप्ट तैनाती उपकरण) का उपयोग कर रहा था। मैं आसानी से पैरामीटर पर नहीं जा सका। शिपिट एसएसएच से गुजर रहा था इसलिए इसने मुझे उपकरण को हटाने और यह बताने की अनुमति दी कि मैंने क्या किया और यह याद रखना नहीं चाहता था।
जॉन मुन्सच

1
LogLevel वह है जिसे मैं ढूंढ रहा था। स्क्रिप्ट चलाते समय कंपनी द्वारा कॉन्फ़िगर किए गए नोटिस नहीं दिखाने का इसका अतिरिक्त लाभ है! (मैं अब w / loglevel ERROR चला रहा हूं)
अंशु

इसे किस फ़ाइल में जोड़ूँ?
विम डेब्लाउवे

यह आपकी SSH कॉन्फ़िगरेशन फ़ाइल है। लिनक्स या मैकओएस में फ़ाइल आम तौर पर एक निर्देशिका में होती है जिसे .ssh कहा जाता है जो आपके घर की निर्देशिका में है और जिसका नाम विन्यास है - ~ /
.ssh

8

मुझे लगता है कि आपके ज्ञात_होस्ट्स (इन सेवाओं को चलाने वाले लोग मेरे अनुभव में हैं, कम से कम इतना होशियार हैं कि वे अपने होस्ट कीज़ को एक ही होस्टनाम की सेवा करने वाली मशीनों के बीच बनाए रखें) और फिर StrictHostKeyChecking को चालू करते हुए, CheckHostIP को बंद करें, और LogLevel ERROR के साथ लॉगिंग आपको सुरक्षा का त्याग किए बिना सबसे अच्छा अनुभव देगा। (ठीक है, चेकहोस्टिप के बिना आपको डीएनएस पर भरोसा करने की ज़रूरत है, जो व्यापक DNSS या कुछ समान के बिना एक बड़ा गैपिंग छेद है; लेकिन हम अभी उस रग के तहत स्वीप करेंगे।)

मैं रीड-ओनली ज्ञात_होस्ट फ़ाइल का उपयोग करता हूं, इसलिए मुझे कुछ करना होगा या मुझे ज्ञात_होस्ट में प्रविष्टियाँ नहीं जोड़ने के बारे में अंतहीन चेतावनी प्राप्त करनी होगी।

मैं क्या उपयोग करता हूं:

Host github.com *.github.com
StrictHostKeyChecking yes
CheckHostIP no
LogLevel ERROR

मैं इन सेवाओं को HTTPS के माध्यम से अपनी वेबसाइटों पर अपनी SSH होस्ट कुंजी प्रकाशित करने के लिए चाहूंगा, इसलिए मैं उन्हें पहली बार कनेक्ट किए बिना स्पष्ट रूप से कॉपी कर सकता हूं और संभावित रूप से MITM हमले के लिए खुद को उजागर कर सकता हूं।


7

एकल ssh सत्र के लिए, इसका उपयोग करें

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host

4
यह 5 साल पुराने एक प्रश्न पर स्वीकृत उत्तर के लिए कुछ भी नया नहीं जोड़ता है।
जेकगोल्ड

5

मैं सुझाव देता हूँ

LogLevel ERROR

ऊपर

LogLevel QUIET

इसलिए आपको अभी भी "होस्टनाम हल नहीं कर सका" और ऐसी अन्य त्रुटियां हैं


आपको अपने SSH कनेक्शनों पर भरोसा करने में सक्षम होना चाहिए। सिर्फ अपने जोखिमों के बारे में चुप न रहें।
सिल्वेनुलग

3
वास्तव में निर्भर करता है। हमारे पास विकास के वातावरण हैं जो प्रत्येक सप्ताह खराब हो जाते हैं और फिर से बनते हैं, उनके ए रिकॉर्ड एक ही रहते हैं लेकिन उनके होस्ट कुंजी को हर बार निर्मित होने पर बनाया जाता है। हम होस्ट कीज़ को जारी नहीं रख सकते क्योंकि ए रिकॉर्ड सिर्फ एक पर्यावरण नाम के आधार पर डेटाबेस में परिभाषित किया गया है, और पर्यावरण के नाम किसी भी समय बनाए गए या नए बनाए जा सकते हैं, इसलिए उपरोक्त वर्कअनुमा वास्तव में उपयोगी है।
एलेक्स बेरी

2

क्या आपने अक्षम करने की कोशिश की है StrictHostKeyChecking? आप इसे -oविकल्प के साथ या कॉन्फ़िगरेशन फ़ाइल में कर सकते हैं ~/.ssh/config


मैं पहले से ही उस का उपयोग कर रहा हूँ। लेकिन इसका एक अलग प्रभाव है: यह मेजबान कुंजी की जाँच के लिए कठोरता को कम करता है। यानी जब होस्ट अज्ञात है, तब भी यह कनेक्ट होता है जब आप उस विकल्प को अक्षम करते हैं। इस प्रकार, यह अभी भी मेजबान को बचाता है। लेकिन मुझे लगता है कि मुझे सही समाधान मिल गया है (मेरा उत्तर देखें)।
अल्बर्ट

0

मुझे निम्नलिखित .ssh / config प्रविष्टियाँ उपयोगी लगीं (LAN DHCP और DNS के साथ):

 CheckHostIP no

 Host *.*
 CheckHostIP yes

परिणाम स्थानीय मशीन के नाम "ज़ोरा" या "गोरोन" गतिशील रूप से निर्दिष्ट आईपी पते के खिलाफ जांच नहीं करेगा, लेकिन www.mycompany.com या node42.planetlab.com में अभी भी उनके स्थिर आईपी की पुष्टि होगी।

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