Ssh

如何使用主機名列表解密加密的 .ssh/known_hosts 的主機名?

  • June 8, 2021

我嘗試通過傳遞 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沒有加密,它們是散列的。您無法解密它們,因為它們未加密。您不能“取消散列”它們,因為散列是關於什麼的——給定散列,不可能¹發現原始字元串。“unhash”的唯一方法是猜測原始字元串並驗證您的猜測。

如果您有主機名列表,則可以將它們傳遞給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

¹在實際意義上,即今天存在的所有電腦都需要比現在的宇宙年齡更長的時間才能做到這一點。

引用自:https://unix.stackexchange.com/questions/175071