C# 使用Renci.SshNet的SHA2服务器SFTP指纹

C# 使用Renci.SshNet的SHA2服务器SFTP指纹,c#,.net,ssh,sftp,sha2,C#,.net,Ssh,Sftp,Sha2,我正在使用Renci.SSHNet与SFTP服务器建立连接。我这样做没有任何问题,但最近我遇到了一个无法通过代码建立连接的服务器。 我不断得到以下错误: 未找到合适的身份验证方法来完成身份验证 (公钥,键盘交互) 问题是,我知道主机、用户和密码都是正确的,因为我可以使用FileZilla建立连接。我注意到,在使用FileZilla连接其他服务器时,我也可以使用我的代码连接到的服务器的指纹是通过RSA生成的,而不是给我带来麻烦的SHA2 TL/DR:我想知道的是:Renci.SshNet.SFTP

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

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

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


TL/DR:我想知道的是:Renci.SshNet.SFTP库是否与sha-2生成的指纹兼容,或者我是否需要使用另一个库

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日志文件,并向我们解释您在服务器端设置身份验证所做的工作。服务器端日志文件也可能有帮助。

构造ConnectionInfo实例时使用的身份验证方法是什么?您是在询问服务器密钥还是用户密钥?@trousyt它是这样做的:public sshfiletransferprotocol(字符串主机名、int端口、字符串用户名、字符串密码){PasswordConnectionInfo connectionInfo=new PasswordConnectionInfo((主机名、端口、用户名、密码);sftp=new SftpClient(connectionInfo);sTransferResultMessage=“”;}@MartinPrikryl我说的是主机密钥(服务器),如果我没弄错的话。非常感谢!我会尽量收集更多的信息,然后我会开始一个新问题。