decrypt(unhash)するスクリプトを、known_hostsファイル内のsshホスト名に渡して、 hostnamses。
したがって、を正確に行うには、の逆を行います。
ssh-keygen -H -f known_hosts
または、ssh設定HashKnownHostsがNoに設定されている場合にこれと同じことを行うには:
ssh-keygen -R know-Host.com -f known_hosts
ssh-keyscan -H know-Host.com >> known_hosts
ただし、(ssh-keyscanが原因で)ホストキーを再ダウンロードする必要はありません。
何かのようなもの:
ssh-keygen --decrypt -f known_hosts --hostnames hostnames.txt
ここで、hostnames.txtにはホスト名のリストが含まれています。
known_hosts
ファイルの行は暗号化されておらず、ハッシュされています。暗号化されていないため、暗号化を解除できません。 hash がすべてであるため、ハッシュを解除することはできません。ハッシュが与えられた場合、元の文字列を見つけることは不可能です。 「ハッシュを解除する」唯一の方法は、元の文字列を推測して、その推測を確認することです。
ホスト名のリストがある場合は、それらをssh-keygen -F
に渡して、ホスト名で置き換えることができます。
while read Host comment; do
found=$(ssh-keygen -F "$Host" | grep -v '^#' | sed "s/^[^ ]*/$Host/")
if [ -n "$found" ]; then
ssh-keygen -R "$Host"
echo "$found" >>~/.ssh/known_hosts
fi
done <hostnames.txt
¹ 実際的な意味では、つまり、今日存在するすべてのコンピュータが、現在の宇宙時代よりも長くかかることになります。
Ssh-keygen(1)のmanページには、-F hostname
オプションが記載されています。
指定されたホスト名をknown_hostsファイルで検索し、見つかった出現箇所をリストします。このオプションは、ハッシュされたホスト名またはアドレスを見つけるのに役立ち、
-H
オプションと一緒に使用して、見つかったキーをハッシュ形式で出力することもできます。
これはあなたが望んでいるようです。