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


14

hostnamses のリストを渡すことにより、known_hostsファイル内のsshホスト名を復号化(ハッシュ解除)するスクリプトを見つけようとします。

だから、正確に逆を行うには

ssh-keygen -H -f known_hosts

または、ssh config 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。解読するものは何ですか?
ムル14

1
暗号化されたknown_hostsファイルを意味します。ssh config HashKnownHostsがYesになっている場合。タイトルを変更しました。
Xorax

回答:


22

known_hostsファイル内の行は暗号化されず、ハッシュされます。それらは暗号化されていないため、解読できません。ハッシュが何であるかということは、ハッシュを「アンハッシュ」することはできません。ハッシュが与えられた場合、元の文字列を発見することは不可能です¹ 。「ハッシュ解除」する唯一の方法は、元の文字列を推測し、推測を確認することです。

ホスト名のリストがある場合は、それらをホスト名に渡し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

¹ 実用的な意味では、つまり、今日存在するすべてのコンピューターがそれを行うには、宇宙の現代よりも時間がかかります。


13

ssh-keygen(1)のマニュアルページには、この-F hostnameオプションに関する説明があります。

known_hostsファイルで指定されたホスト名を検索し、見つかったものをリストします。このオプションは、ハッシュ化されたホスト名またはアドレスを検索するのに役立ち-Hます。また、ハッシュ化された形式で見つかったキーを印刷するオプションと組み合わせて使用できます。

これはあなたが望むもののようです。


これは、ハッシュされたホスト名を含む行を返します。ハッシュを解除して、known_hostsファイルで置き換えたいと思います。各行を解析し、ハッシュを解除して、known_hostsファイルで置き換えるためのスクリプトが必要です。
Xorax

2
@Xoraxはい。ただし、このコマンドを使用すると、ハッシュされたホスト名を取得して、known_hostsファイル内のホスト名をに置き換えることができますsed
vinc17 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.