如何使用列表的主机名解密解密的.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。要解密什么?
muru

1
我的意思是加密的known_hosts文件。ssh配置HashKnownHosts的位置为“是”。我修改了标题。
Xorax

Answers:


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 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.