我正在使用Renci.SSHNet建立与SFTP服务器的连接。我这样做没有任何问题,但我最近遇到了一个服务器,我无法通过我的代码建立连接 我一直收到以下错误:
找不到合适的身份验证方法来完成身份验证 (公钥,键盘交互)。
问题是,我知道主机,用户和密码是正确的,因为我可以使用FileZilla建立连接。我注意到在使用FileZilla连接到其他服务器时,我可以通过RSA连接到我的代码的指纹是通过RSA生成的,而不是给我带来麻烦的那个,即SHA2。
TL / DR:我想知道的是:Renci.SshNet.SFTP库是否与sha-2生成的指纹兼容,还是我必须使用另一个库?
答案 0 :(得分:0)
SSH.NET库不支持ECDSA密钥交换算法(ecdh-sha2- *)(截至2014.4.6-beta2版本)。
它支持这些:
ecdh-sha2 - *被注释掉了,可能是因为实现没有完成/测试。
虽然注意服务器可以支持多种算法,并且可以就不同客户端的不同算法达成一致。
因此,您在FileZilla中看到不受支持的密钥类型这一事实并不意味着服务器必须坚持使用此密钥类型。
很明显,服务器不需要在身份验证阶段连接失败的情况下进行ECDSA密钥交换。 成功进行密钥交换后,身份验证仅发生。所以你的根本问题不是密钥交换,而是身份验证。
如果您需要帮助解决身份验证问题start a new question,请包含相关的源代码,FileZilla日志文件,并向我们解释您在服务器端设置身份验证的操作。服务器端日志文件也可能有用。