ssh-keyscan 不接受 SSH 的 ProxyCommand 选项。因此,为 ssh 配置的代理并不会自动配置这个独立的扫描器。

一种做法是使用已经建立的本地 TCP 中继:它完成所需的代理认证和 CONNECT 交换,然后暴露目标 SSH 服务器的字节流。如果该中继监听 127.0.0.1:2222:

ssh-keyscan -p 2222 127.0.0.1 > candidate.keys
ssh-keygen -lf candidate.keys

第一条命令收集候选密钥,第二条显示它们的指纹。中继必须在用完完整的代理响应之后才转发 SSH 流,而不是把 HTTP 头交给扫描器。

输出中的主机标签描述的是本地中继端点。不要原样追加它,并假定它现在标识远程 SFTP 主机名。

在把密钥与 known_hosts 中的真实主机和端口关联之前,请通过可信记录或管理员核实指纹。ssh-keyscan 只收集可访问端点所呈现的内容;代理连接成功并不等于该密钥已通过认证。

相关文章