我们在 Netsuite 中遇到一个错误,尽管在 Netsuite 中输入的主机密钥与我们要连接的服务器的密钥匹配,但 Netsuite 仍然出现错误:
“提供的主机密钥与远程服务器的指纹不匹配。”
在阅读类似的帖子时堆栈溢出,尽管已经将我们发送的公钥与 的输出的公钥进行了比较和匹配ssh-keyscan server-name
,但我们仍然会收到错误。
ssh-keyscan 的结果:
从 Netsuite 发送的配置:
我们还清除了所有其他配置文件中的所有其他公钥,以防ssh-keyscan
读取其他配置文件的~/.ssh/authorized_keys
文件。
另外需要注意的是:
- 当使用 FileZilla 时,我们可以使用相同的密钥对无问题地连接。
- 我们还启动了一个临时的 Windows 服务器,在其上安装了一个 SFTP 服务器,并且 Netsuite 使用相同的密钥对成功连接。
关于我们如何解决这个问题,有什么建议吗?
答案1
主机密钥与 SSH 公钥不同。
主机密钥是该服务器的唯一标识符,仅用于服务器验证,而不是通过存储在中的公钥进行用户身份验证~/.ssh/authorized_keys
。
我不熟悉 NetSuite,但对我来说,“主机密钥”这个术语不是SSH 密钥,而是一个人获得的已知主机密钥,例如,当一个人第一次通过 SSH 进入服务器时。
阅读关于这个博客的信息似乎证实了这一点。
NetSuite N/sftp hostKey 参数是什么?
根据 NS 文档:
当客户端尝试建立连接时,SFTP 服务器会使用主机密钥来标识自己。主机密钥是底层 SSH 协议用来允许服务器提供指纹的唯一密钥。客户端可以验证预期的服务器是否已响应特定 URL 和端口号的连接请求。
这意味着什么?远程服务器在连接时会使用主机密钥来标识自己,但 NetSuite 希望您提前提供该值以验证此连接。NetSuite 有意不提供从远程服务器“请求”主机密钥的方法。相反,它希望您使用 ssh-keyscan 实用程序(例如,内置于 Windows 命令 shell 中)“手动查找”。
例子:
ssh-keyscan -t rsa -p 1234 acme.com
此示例将在端口 1234 上连接时获取(并向您显示)acme.com 的 RSA 主机密钥。获取此值后,您可以在使用 NetSuite 的“sftp.createConnection”调用建立连接时使用它。
由于您的服务器将使用 SSH 进行 SFTP,因此命令将如下所示:
ssh-keyscan -t rsa -p 22 example.com
端口 22 用于 SSH 连接,而 SFTP 连接也是如此。