सवाल मेरी .ssh / known_hosts फ़ाइल को कैसे प्रबंधित करें


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

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


42
2018-06-21 02:04


मूल




जवाब:


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

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

Known_hosts से एक एकल प्रविष्टि को हटाने के लिए:

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

58
2017-09-16 23:50





अगर आपके पास अपने सभी होस्टों की एक सूची है, तो आप कुछ ऐसा कर सकते हैं

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

यह आपके .ssh / known_hosts फ़ाइल को मेजबान स्कैन करने के आधार पर नव निर्मित जेनरेट के साथ ओवरराइट करेगा।

और यह भी करें कि थिथ्रेशिव सुझाव क्या है; HashKnownHosts यहां मदद से अधिक परेशान है।


25
2018-06-21 03:08



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


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

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

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

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

#HashKnownHosts yes

20
2018-06-21 02:36



~ / .Ssh / known_hosts को साफ़ करने में भी मदद मिलती है जब दूरस्थ होस्ट परिवर्तन की कॉन्फ़िगरेशन और एसएसएच चेतावनी दिखाता है। हालांकि किसी को इसके साथ सावधान रहना चाहिए और केवल विश्वसनीय मेजबानों के लिए चेतावनी को अनदेखा करना चाहिए। - Alex
एक बेहतर विकल्प यह बता सकता है कि एक विशिष्ट होस्टनाम के लिए हैश कैसे उत्पन्न किया जाए, जिससे वह उस हैश को ज्ञात_होस्ट में खोज सके ताकि वह इसे अपडेट कर सके। - Cerin
उपर्युक्त परिवर्तन के बाद बस एक नई प्रविष्टि जोड़ें उदा। नए सर्वर से कनेक्ट करके ssh root@something-new-or-new-dns-alias। यह मूल ताज़ा कर देगा known_hosts मेजबान नाम / आईपी फ़ाइल और डी-क्रिप्ट करें। - Nux


मेरे ज्ञात_होस्ट्स फ़ाइल में 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

2
2017-12-31 23:34