सवाल ssh: स्वचालित रूप से कुंजी स्वीकार करते हैं


मैंने यह छोटी उपयोगिता लिपि लिखी है:

for h in $SERVER_LIST; do ssh $h "uptime"; done

जब कोई नया सर्वर जोड़ा जाता है $SERVER_LIST, लिपि के साथ बंद कर दिया गया है:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

मैंने कोशिश की yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

कोई भाग्य के साथ।

क्या parametrize करने का कोई तरीका है ssh किसी भी नई कुंजी को स्वचालित रूप से स्वीकार करने के लिए?


171
2018-04-18 09:11


मूल


लेकेनस्टीन का जवाब उत्कृष्ट और सही है, लेकिन मैं सिर्फ यह ध्यान रखना चाहता था कि चूंकि एसएसएच "हां" की उम्मीद कर रहा है और yes "वाई" आउटपुट, आप के साथ बेहतर भाग्य हो सकता है for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done (अतिरिक्त हां नोट करें, जो हां बताता है कि "वाई" के बजाय क्या कहना है)। - chazomaticus


जवाब:


उदाहरण के लिए, StrictHostKey चेकिंग विकल्प का उपयोग करें:

ssh -oStrictHostKeyChecking=no $h uptime

यह विकल्प ~ / .ssh / config में भी जोड़ा जा सकता है, उदा।

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

ध्यान दें कि जब मेजबान कुंजी बदल जाती है, तो आपको इस विकल्प के साथ भी एक चेतावनी मिल जाएगी:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

यदि आपके मेजबान को अक्सर पुनर्स्थापित नहीं किया जाता है, तो आप इसे कम सुरक्षित बना सकते हैं (लेकिन अक्सर बदलते मेजबान कुंजियों के लिए अधिक सुविधाजनक) -oUserKnownHostsFile=/dev/null विकल्प। यह सभी प्राप्त मेजबान कुंजी को त्याग देता है ताकि यह कभी भी चेतावनी उत्पन्न न करे।


18.04 के साथ, एक नई संभावना है: StrictHostKeyChecking=accept-new। से man 5 ssh_config:

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

185
2018-04-18 09:29



यह सबसे अच्छा समाधान नहीं है क्योंकि यह अंतर्निहित सुरक्षा उपकरण को छोड़ देता है। ssh-keyscan बेहतर है, अगर यह आपके सिस्टम पर उपलब्ध है। - Stefan Lasiewski
@StefanLasiewski अगर आप अविश्वसनीय नेटवर्क पर हैं तो यह मध्य हमलों में आदमी की अनुमति देता है। निश्चित मेजबानों के लिए नई कुंजी स्वीकार करने के लिए, ssh-keyscan दृष्टिकोण अधिक सभ्य है। स्थानीय वर्चुअल मशीनों और अन्य होस्टों के लिए भरोसेमंद / पुन: उपयोग किए गए आईपी पते वाले विश्वसनीय नेटवर्क में, वर्णित दृष्टिकोण पर्याप्त है। - Lekensteyn
बस दो समाधानों के बीच अंतर को स्पष्ट करने के लिए: द ssh-keyscan समाधान केवल एक बार में एक मैन-इन-द-बीच हमले के लिए प्रवण होता है ssh-keyscan चल रहा है -oStrictHostKeyChecking=no समाधान हर बार एक मैन-इन-द-बीच हमले के लिए प्रवण होता है sshचल रहा है - Erik Sjölund


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

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

ध्यान दें: <Ip-address> और <hostname> को उस सर्वर के आईपी और डीएनएस नाम के साथ बदलें जिसे आप जोड़ना चाहते हैं।

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

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

तो आप दौड़ सकते हैं:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

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


96
2017-10-17 00:24



इसे सॉर्ट के माध्यम से चला रहा है uniq और फिर अजीब का उपयोग करके डुप्लिकेट होस्ट की तलाश करने के बाद स्क्रिप्ट को बदले गए मेजबानों का पता लगाने में सक्षम बनाता है और उपयोगकर्ताओं को केवल उन लोगों के बारे में चेतावनी देता है, क्योंकि अलग-अलग चाबियों के साथ एक ही होस्ट को परेशानी हो सकती है - Lennart Rolland
आप एक नोट जोड़ना चाह सकते हैं -H हैश होस्टनाम और पते। - David Cullen


मैं इस प्रतिक्रिया के साथ थोड़ा देर हो चुकी हूं, लेकिन अपटाइम एकत्र करने से पहले समझदारी का तरीका नई मशीन पर एक एसएसएच-स्कैनकेन करना होगा।

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

सुविधा के लिए सैनिटी चेक को अक्षम करना एक खराब योजना की तरह लगता है, भले ही आपको लगता है कि आप पूरी तरह से पर्यावरण के नियंत्रण में हैं।


23
2017-11-24 19:47



यह वास्तव में मैं क्या देख रहा था। धन्यवाद। - user156516
उपर्युक्त आदेश चला रहा है और वास्तव में बैंड से प्राप्त किए गए फिंगरप्रिंट के खिलाफ मेजबान कुंजियों की जांच नहीं करना ठीक उसी तरह से कमजोर है StrictHostKeyChecking no - code_monk
@code_monk: नहीं, यह नहीं है। मैं एक खोलता हूँ एक बंद विफलता का अवसर (ज्ञात मेजबानों में गलत होस्ट से जोड़ा जाने वाला कुंजी स्वीकार करना)। StrictHostKey चेकिंग नंबर अन्य मशीनों के लिए दोहराने की अनुमति देता है। - tink


सर्वरों की सूची स्वचालित रूप से जोड़ने के लिए हम नीचे कर सकते हैं:

फ़ाइल सर्वर-सूची में सर्वर आईपी जोड़ें

आईपी ​​को नीचे प्रारूप में जोड़ा जाना चाहिए।

का आउटपुट cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

अपना स्थान बदलकर आईपी को ऊपर बदलें।

नीचे आदेश सूची से सभी सर्वर जोड़ देगा।

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts

0
2018-02-16 07:46