web-dev-qa-db-ja.com

ホスト名のリストを使用して、暗号化された.ssh / known_hostsのホスト名を復号化する方法は?

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にはホスト名のリストが含まれています。

16
Xorax

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オプションと一緒に使用して、見つかったキーをハッシュ形式で出力することもできます。

これはあなたが望んでいるようです。

13
vinc17