अनुमति से बचने के लिए ssh से कैसे बचें?


57

हम आरएसी स्थापना के लिए ओरेकल नोड्स की स्थापना में तेजी लाने का प्रयास कर रहे हैं। इसके लिए आवश्यक है कि हम ssh को संस्थापित और कॉन्फ़िगर करें ताकि यह पासवर्ड के लिए संकेत न करे।

समस्या यह है: पहले उपयोग पर, हमें संकेत दिया जाता है

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

क्या इससे बचने का कोई तरीका है या हम मैन्युअल रूप से हर सर्वर से कम से कम एक बार हर सर्वर पर कनेक्ट होने के लिए बर्बाद हैं?

जवाबों:


90

StrictHostKeyChecking noअपनी /etc/ssh/ssh_configफ़ाइल में सेट करें , जहां यह सर्वर पर प्रत्येक उपयोगकर्ता द्वारा उपयोग किया जाने वाला एक वैश्विक विकल्प होगा। या इसे अपनी ~/.ssh/configफ़ाइल में सेट करें , जहां यह केवल वर्तमान उपयोगकर्ता के लिए डिफ़ॉल्ट होगा। या आप इसे कमांड लाइन पर उपयोग कर सकते हैं:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

यहां बताया गया है कि यह कैसे काम करता है man ssh_config (या इसे और अधिक वर्तमान संस्करण देखें ):

StrictHostKeyChecking

      यदि यह ध्वज "हाँ" पर सेट है, तो ssh कभी भी $HOME/.ssh/known_hostsफ़ाइल में होस्ट कीज़ को स्वचालित रूप से नहीं जोड़ेगा , और उन होस्ट से कनेक्ट करने से इनकार कर देगा जिनकी होस्ट कुंजी बदल गई है। यह ट्रोजन हॉर्स हमलों के खिलाफ अधिकतम सुरक्षा प्रदान करता है, हालांकि, /etc/ssh/ssh_known_hostsफ़ाइल के खराब होने पर परेशान किया जा सकता है, या नए मेजबानों से कनेक्शन अक्सर बनाया जाता है। यह विकल्प उपयोगकर्ता को सभी नए होस्टों को मैन्युअल रूप से जोड़ने के लिए मजबूर करता है। यदि यह ध्वज "नहीं", ssh पर सेट हैउपयोगकर्ता द्वारा होस्ट की गई फ़ाइलों की नई होस्ट कुंजियाँ स्वचालित रूप से जोड़ देगा। यदि यह ध्वज "पूछने" के लिए सेट किया गया है, तो उपयोगकर्ता द्वारा पुष्टि किए जाने के बाद ही उपयोगकर्ता ज्ञात होस्ट फ़ाइलों में नई होस्ट कुंजियाँ जोड़ी जाएंगी, जो वास्तव में वे करना चाहते हैं, और ssh उन होस्ट को कनेक्ट करने से इंकार कर देगा जिनकी होस्ट कुंजी बदल गई है । ज्ञात मेजबानों की मेजबान कुंजी सभी मामलों में स्वचालित रूप से सत्यापित की जाएगी। तर्क "हाँ", "नहीं" या "पूछना" होना चाहिए। डिफ़ॉल्ट "पूछना" है।


1
+1, मैंने अपने सर्वरों के लिए भी यह किया है। और बस स्पष्ट होने के लिए, प्रश्न में संदेश कनेक्ट क्लाइंट कंप्यूटर पर ssh क्लाइंट से आता है न कि सर्वर से।
पाटकोस ससाबा

3
यह उत्तर बनाने में एक सुरक्षा समस्या की तरह लगता है।
सनस्पार्क

25

ssh-keyscan - सार्वजनिक कुंजी ssh इकट्ठा करें

यदि आप पहले से ही उन मेजबानों की सूची जानते हैं, जिनसे आप जुड़ेंगे, तो आप बस जारी कर सकते हैं:

ssh-keyscan host1 host2 host3 host4

आप -Hविकल्प दे सकते हैं कि यह अब तक ssh चूक की तरह हैश परिणाम है

इसके अलावा आप दे सकते हैं -t keytypeकि कीपाइप है dsa, rsaया ecdsaयदि आपके पास प्राथमिकता है कि डिफ़ॉल्ट के बजाय किस प्रकार की कुंजी को पकड़ो।

आपके द्वारा चलाए जाने के बाद, ssh-keyscanयह आपकी ज्ञात-होस्ट फ़ाइल को पूर्व-आबाद कर देगा और आपके पास नई कुंजी जोड़ने के लिए आपसे एसएचएस मांगने की अनुमति नहीं होगी।


1
मैं थोड़ा हैरान हूँ "टिप्पणी पूर्व-आबादी होगी" के बारे में ... know_hosts इसे चलाने के बाद बनाया या संशोधित नहीं किया गया है। आप इसका मतलब यह है कि सामग्री को पॉप्युलेट करने के लिए फ़ाइल में पाइप किया जा सकता है?
rschwieb

4
Techrepublic.com/article/… के साथ पुष्टि करना । ssh-keyscan -H myhost >> ~/.ssh/known_hosts, या सर्वर-वाइड के लिए,/etc/ssh/ssh_known_hosts
cole

12

आप फिंगरप्रिंट को प्रत्येक सर्वर के ज्ञात_होस्ट में जोड़ सकते हैं। एकल उपयोगकर्ता के लिए:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
यह हैशिंग के पेश होने के बाद से इसे करने का सही तरीका नहीं है।
डे ० स ० २०'१५

10

होस्ट को अनदेखा करें

HostKeyChecking पर ध्यान न दें। इसके लिए मैं उदाहरण का उपयोग करता हूं:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

होस्ट जोड़ें

.ssh/known_hostsअपने पहले कनेक्ट से पहले होस्ट / सर्वर के फिंगरप्रिंट को जोड़ें । यह सुरक्षित तरीका है।


नमस्ते। Oracle ssh कमांड जारी करता है, इसलिए मेरा इस पर कोई नियंत्रण नहीं है कि यह कैसा प्रदर्शन करता है।
निकोलस डी फोंटेनै

Upvoted। अधिकांश उत्तर मैंने देखा है कि ज्ञात मेजबानों की फ़ाइल को हटाने के लिए देव का उल्लेख याद आता है। यह कमांड को अधिक प्रयोग करने योग्य बनाता है और किसी भी विद्यमान विन्यास को बर्बाद नहीं करेगा।
एलेक्स

(२) यकीन है, ज्ञात होस्ट फ़ाइल में फिंगरप्रिंट जोड़ना आदर्श दृष्टिकोण है - लेकिन कोई इसे कैसे करता है? (१) उपयोगकर्ता ज्ञात होस्ट फ़ाइल को सेट करना क्यों फायदेमंद है  /dev/null? फ़ाइल ssh -oStrictHostKeyChecking=no user@example.netमें सर्वर के फिंगरप्रिंट प्राप्त करने के लिए एक बार करना बेहतर नहीं होगा $HOME/.ssh/known_hosts, इसलिए बाद के कनेक्शन पुष्टि के अनुरोध के बिना आगे बढ़ेंगे?
जी-मैन

3

कोशिश करने से पहले निम्नलिखित स्निपेट को निष्पादित करें।

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: सख्ती से उत्पादन सर्वर के लिए नहीं, ManInMiddle से सावधान रहें


0

मुझे एक प्रकार की चीजों के लिए टिम का जवाब पसंद है, लेकिन अगर यह एक मेजबान है जिसे आप नियमित आधार पर कनेक्ट करने का इरादा रखते हैं, तो मैं आपके ~ / .ssh / config में एक प्रविष्टि बनाऊंगा (यदि फ़ाइल मौजूद नहीं है तो इसे बनाएं)।

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.