我正在尝试制作一个自动执行 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 指纹进行自动化的唯一方法是:
- 获取完整公钥。
- 将获取的密钥的指纹与用户提供的指纹进行比较。
- 如果匹配,则将完整的公钥写入known_hosts文件。