मेरी .ssh / ज्ञात_होस्ट फ़ाइल कैसे प्रबंधित करें


47

मैं सामानों का परीक्षण करने के लिए वर्चुअल बॉक्स में वर्चुअल सर्वरों के एक समूह के साथ एक उबंटू डेस्कटॉप चलाता हूं, पूर्व में मैं अन्य प्रकार के दूरस्थ वीपीएस लिनक्स बक्से से भी जुड़ता रहा हूं। वर्तमान में मेरी .ssh/known_hostsफ़ाइल में कुंजियों का एक पूरा गुच्छा है, जिनमें से अधिकांश का उपयोग नहीं किया जा रहा है।

मैं अपनी .ssh/known_hostsफ़ाइल को साफ़ करना चाहता हूं , लेकिन मुझे कैसे पता चलेगा कि कौन सी कुंजी किस होस्ट की है? यानी मुझे कैसे पता चलेगा कि मैं किन चाबियों को सुरक्षित रूप से निकाल सकता हूं और मुझे किन लोगों को अकेला छोड़ देना चाहिए?

जवाबों:


64

यह जानने के लिए कि किस प्रविष्टि को ज्ञात होस्टनाम के लिए जाना जाता है_हॉट्स:

 # ssh-keygen -H  -F <hostname or IP address>

ज्ञात_होस्ट से एकल प्रविष्टि को हटाने के लिए:

 # ssh-keygen -R <hostname or IP address>

27

यदि आपको अपने सभी मेजबानों की सूची मिल गई है, तो आप कुछ ऐसा कर सकते हैं

ssh-keyscan -t rsa,dsa -f list_of_hosts > ~/.ssh/known_hosts

मेजबानों को स्कैन करने के आधार पर एक नई उत्पन्न के साथ आपकी .ssh / ज्ञात_होस्ट फ़ाइल को अधिलेखित कर देगा।

और यह भी कि क्या अभिषेक सुझाव देता है; यहां से मदद की तुलना में HashKnownHosts अधिक झुंझलाहट है।


ssh-keyscanlist_of_hostsफ़ाइल का एक बहुत ही सख्त स्वरूपण नियम है । यह केवल ऐड्रेस होना चाहिए और प्रत्येक पते के बाद कोई अन्य व्हाट्सएप और एलएफ नहीं होना चाहिए। जिसमें अंतिम पते के बाद LF शामिल है। अन्यथा आपको जनरेट की गई फ़ाइल में बहुत अधिक कचरा मिलता है।
नक्स

21

परेशानी से...

डिफ़ॉल्ट रूप से उबंटू ज्ञात_होस्ट्स फ़ाइल को होस्ट करता है (यह डिफ़ॉल्ट ओपनशॉट व्यवहार नहीं है), यह जानने के लिए कि आप क्या सिस्टम एक्सेस करते हैं, फाइल को पढ़ना किसी के लिए भी मुश्किल है।

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

आप / etc / ssh / ssh_config के विकल्प पर टिप्पणी करके नई होस्ट प्रविष्टियों को हैशेड होने से रोक सकते हैं

#HashKnownHosts yes

जब दूरस्थ होस्ट का कॉन्फ़िगरेशन बदलता है और ssh एक चेतावनी दिखाता है तो ~ / .ssh / ज्ञात_होस्ट्स को साफ करने में भी मदद मिलती है। हालाँकि किसी को भी इससे सावधान रहना चाहिए और केवल विश्वसनीय मेजबानों के लिए वार्निग को अनदेखा करना चाहिए।
एलेक्स

6
एक बेहतर विकल्प यह हो सकता है कि किसी विशिष्ट होस्टनाम के लिए हैश कैसे उत्पन्न किया जाए, जिससे उसे ज्ञात_होस्ट में उस हैश की खोज करने की अनुमति मिलती है ताकि वह उसे अपडेट कर सके।
15

1
उपरोक्त परिवर्तन के बाद, नए सर्वर से कनेक्ट करके जैसे ही एक नई प्रविष्टि जोड़ें ssh root@something-new-or-new-dns-alias। यह मूल known_hostsफ़ाइल को रीफ़्रेश करेगा और होस्ट नामों / IP को डी-क्रिप्ट करेगा।
नक्स

2

मेरी ज्ञात_होस्ट फ़ाइल में 300 से अधिक पुरानी पुरानी प्रविष्टियाँ थीं। यह सुनिश्चित नहीं है कि यह सभी प्रणालियों (या यहां तक ​​कि अधिकांश प्रणालियों) के लिए काम करेगा, लेकिन यहां मेरी प्रश्नोत्तर स्क्रिप्ट है। आपको मिलान स्ट्रिंग्स या स्थान को समायोजित करना पड़ सकता है।

#!/bin/sh
list=`cat ~/.ssh/known_hosts | awk '{print $1}' |sed -e 's/,/ /g' | sort -u `

listsorted=$(printf "%s\n" ${list[@]} | sort -u)
echo $listsorted
#listsorted="10.2.10.1"
echo > /tmp/sshstat.txt
for host in $listsorted ;
do
echo $host 
ssh -oBatchMode=yes -oConnectTimeout=2  root@${host} "exit" >/tmp/sshstat.txt 2>&1 
ret=$?
if [ $ret -ne 0 ]; then
     echo "Failed: $host"
     echo sed -i.bak \"/$host/d\" "~/.ssh/known_hosts" | sh
else
    grep "Offending RSA" /tmp/sshstat.txt |  sed -e 's/:/ /g' | awk '{printf "sed -i.bak -e \"%dd\" %s  \n", $6, "~/.ssh/known_hosts" }' | sh
   fi
done
#echo $list

यह हैशेड known_hostsफ़ाइल पर काम नहीं करता है , और चूंकि प्रश्नकर्ता पूछता है, "मुझे कैसे पता चलेगा कि कौन सी कुंजी किस होस्ट से संबंधित है" मुझे लगता है कि यह बहुत संभावना है कि उसकी फ़ाइल हैशेड है। वह कहता है कि वह उबंटू में है, और जैसा theotherreceiveकि कहता है, उबंटू डिफ़ॉल्ट रूप से हैश करता है।
नील मैय्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.