回答:
苦労して...
デフォルトでは、Ubuntuはknown_hostsファイルのホスト名をハッシュし(これはデフォルトのopensshの動作ではありません)、ファイルを読んでいる人がアクセスするシステムを知るのを困難にします。
本当にファイルをきれいにしたい場合、最も簡単なオプションはおそらくそれを削除して、発生したことがわかっているサーバーのキーをチェックすることですが、実際にはknown_hostsをそのままにしておきます。
/ etc / ssh / ssh_configのオプションをコメント化することにより、新しいホストエントリがハッシュされないようにすることができます。
#HashKnownHosts yes
ssh root@something-new-or-new-dns-alias
。これにより、元のknown_hosts
ファイルが更新され、ホスト名/ IPの暗号化が解除されます。
known_hostsファイルに300を超える古いエントリがありました。すべてのシステム(またはほとんどのシステム)で機能するかどうかはわかりませんが、ここに私のQ&Dスクリプトを示します。一致する文字列または場所を調整する必要がある場合があります。
#!/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
ファイルでは機能せず、質問者は「どのキーがどのホストに属しているかをどうやって知るのか」と尋ねるので、彼のファイルはハッシュ化される可能性が高いと思います。彼はUbuntuを使用してtheotherreceive
いると言っており、言うようにUbuntuはデフォルトでハッシュします。
ssh-keyscan
list_of_hosts
ファイルのフォーマット規則は非常に厳格です。各アドレスの後には、アドレスだけでLF以外の空白がない必要があります。これには、最後のアドレスの後のLFが含まれます。そうしないと、生成されたファイルに大量のゴミが入ります。