কীভাবে আমার .ssh / পরিচিত_hosts ফাইল পরিচালনা করবেন


47

স্টাফ আউট ইত্যাদি পরীক্ষা করার জন্য ভার্চুয়াল বক্সে একগুচ্ছ ভার্চুয়াল সার্ভার সহ আমি একটি উবুন্টু ডেস্কটপ চালাই etc. বর্তমানে আমার .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 / জ্ঞাত_হোস্টস ফাইলটিকে নতুনভাবে উত্পন্ন একের সাথে ওভাররাইট করবে।

এবং থিয়োথ্রিসিপসের পরামর্শ অনুযায়ী যা করুন; হ্যাশকান্টহোস্টগুলি এখানে সহায়তার চেয়ে বেশি বিরক্তিকর।


ssh-keyscanlist_of_hostsফাইলটির একটি অত্যন্ত কঠোর বিন্যাস রয়েছে । প্রতিটি ঠিকানার পরে এটি কেবল অ্যাড্রেস এবং অন্য কোনও শ্বেত স্পেস হওয়া দরকার। এটি শেষ ঠিকানা পরে এলএফ অন্তর্ভুক্ত। অন্যথায় আপনি উত্পন্ন ফাইলটিতে প্রচুর ট্র্যাশ পাবেন।
নেক্স

21

কঠিনভাবে...

ডিফল্টরূপে উবুন্টু নামী হোস্ট ফাইলটি হোস্টনাম দেয় (এটি কোনও ডিফল্ট ওপেনশ আচরণ নয়), ফাইলটি পড়ার পক্ষে কারও পক্ষে আপনার কোন সিস্টেমে অ্যাক্সেস রয়েছে তা জানতে অসুবিধা তৈরি করতে।

আপনি যদি ফাইলটি সত্যিই পরিষ্কার করতে চান, তবে সবচেয়ে সহজ বিকল্পটি সম্ভবত এটি মুছে ফেলা হবে এবং সার্ভারগুলির কীগুলি উত্থাপিত হওয়ার সাথে সাথে চেক করুন, তবে সত্যই আমি কেবল পরিচিত_হোস্টগুলি ছেড়ে চলে যাব।

আপনি / etc / ssh / ssh_config এ বিকল্পটি মন্তব্য করে নতুন হোস্ট এন্ট্রিগুলি হ্যাশ হওয়া থেকে বিরত রাখতে পারেন can

#HashKnownHosts yes

The / .ssh / জ্ঞান_হোস্টগুলি পরিষ্কার করা যখন দূরবর্তী হোস্টের কনফিগারেশনটি পরিবর্তন করে এবং এসএসএস সতর্কতা দেখায় তখনও সহায়তা করে। তবে এটির সাথে সাবধান হওয়া উচিত এবং কেবল বিশ্বস্ত হোস্টদের জন্য সতর্কতা অবহেলা করা উচিত।
অ্যালেক্স

6
নির্দিষ্ট হোস্টনামের জন্য কীভাবে হ্যাশ তৈরি করা যায় তার ব্যাখ্যা দেওয়ার চেয়ে আরও ভাল বিকল্প হতে পারে, তাকে পরিচিত_হোস্টগুলিতে সেই হ্যাশটি অনুসন্ধান করার অনুমতি দেয় যাতে সে এটি আপডেট করতে পারে।
সেরিন

1
উপরের পরিবর্তনের পরে একটি নতুন এন্ট্রি যুক্ত করুন যেমন এর সাথে নতুন সার্ভারের সাথে সংযুক্ত হয়ে ssh root@something-new-or-new-dns-alias। এটি আসল known_hostsফাইলটি রিফ্রেশ করবে এবং হোস্টের নাম / আইপি ডি-ক্রিপ্ট করবে।
Nux

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বলেছেন উবুন্টু ডিফল্টরূপে হ্যাশ করে।
নিল মেহেহে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.