如何编写md5格式的Know_hosts文件?

如何编写md5格式的Know_hosts文件?

我正在尝试制作一个自动执行 ssh 连接的程序。它也可以在 Windows 中使用,因此由于 Putty 仅接受主机密钥的 MD5 指纹格式,因此我尝试让 ssh 也接受 MD5:

我在ubuntu 18.04上的命令:

ssh -o UserKnownHostsFile=myknownhosts -o FingerprintHash=md5  [email protected]

myknownhosts 格式:

256 MD5:57:fb:dc:8f:25:29:1a:f7:1f:aa:c8:12:fc:bf:8a:XX 1.2.3.4 (ED25519)
2048 MD5:73:37:38:38:d8:4f:3b:9e:41:2e:9a:12:a8:49:92:XX 1.2.3.4 (RSA)
256 MD5:37:3b:87:29:6b:7f:81:1a:15:85:1b:12:49:8d:f7:XX 1.2.3.4 (ECDSA)

这是输出:

ssh-keygen -lf testhost.ssh-keyscan -E md5

其中testhost.ssh是1.2.3.4的公钥

问题是 SSH 无法自动验证,在第一个命令之后它不断打印 MD5 指纹并询问我是否确定:

 Are you sure you want to continue connecting (yes/no)? no

我认为问题出在myknownhosts格式上,如果我使用 sha256 格式保存,它就可以正常工作。md5 指纹有特殊的格式吗?

我当然不想用StrictHostKeyChecking=no

答案1

known_hosts 文件不存在“sha256 格式”或“md5 格式”。OpenSSH 根本不接受文件中的密钥指纹,无论其类型如何 - 它始终要求完整公钥才能列出。您需要ssh-keygen -l完全跳过转换步骤。

OpenSSH 仅将指纹用于显示目的(例如在“您知道这台服务器吗”确认对话框中),而“FingerprintHash”等选项只会改变这些消息的外观 - 它们不会影响任何文件格式。

使用 MD5 指纹进行自动化的唯一方法是:

  1. 获取完整公钥。
  2. 将获取的密钥的指纹与用户提供的指纹进行比较。
  3. 如果匹配,则将完整的公钥写入known_hosts文件。

相关内容