0

我正在使用 Renci.SSHNet 建立与 SFTP 服务器的连接。我这样做没有任何问题,但我最近遇到了无法通过代码建立连接的服务器。
我不断收到以下错误:

找不到合适的身份验证方法来完成身份验证(公钥、键盘交互)。

问题是,我知道主机、用户和密码是正确的,因为我可以使用 FileZilla 建立连接。我注意到在使用 FileZilla 连接到其他服务器时,我也可以通过我的代码连接到的那些指纹是通过 RSA 生成的,而不是给我带来麻烦的那个是 SHA2。

TL/DR:我想知道的是:Renci.SshNet.SFTP 库是否与 sha-2 生成的指纹兼容,还是我必须为此使用另一个库?

4

1 回答 1

0

SSH.NET 库还不支持 ECDSA 密钥交换算法 (ecdh-sha2-*)(截至 2014.4.6-beta2 版本)。

它支持这些:

  • diffie-hellman-group-exchange-sha256
  • diffie-hellman-group-exchange-sha1
  • diffie-hellman-group14-sha1
  • diffie-hellman-group1-sha1

ecdh-sha2-* 被注释掉,可能是因为实现未完成/测试。


尽管请注意,服务器可以支持多种算法,并且可以与不同的客户端就不同的算法达成一致。

因此,您在 FileZilla 中看到不受支持的密钥类型这一事实并不意味着服务器必须坚持使用这种密钥类型。

很明显,服务器不需要 ECDSA 密钥交换,因为连接在身份验证阶段失败。仅成功交换密钥后进行身份验证。所以你的根本问题不是密钥交换,而是身份验证。

如果您需要帮助解决身份验证问题,请开始一个新问题,包括相关源代码、FileZilla 日志文件,并向我们解释您在服务器端设置身份验证所做的工作。服务器端日志文件也可能会有所帮助。

于 2016-03-15T11:23:51.417 回答