You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.Net Core使用SSH.NET包连接远程SFTP出现哈希算法不支持错误问询

问题根因

你遇到的异常与业务代码逻辑无关,是SSH.NET 2020.0.1版本的.NET Core兼容性缺陷导致的:

  • 该版本内部实现HMAC哈希校验逻辑时,采用了操作HashName属性动态创建哈希算法的实现方式,这种方式仅在.NET Framework下被支持
  • .NET Core 3.0+废弃了通过HashName属性动态调用哈希算法的能力,要求必须显式实例化对应哈希算法的子类,因此触发报错
解决方案

方案1(推荐):升级SSH.NET版本

SSH.NET官方在2020.0.2版本已经修复了该兼容性问题,直接将NuGet中的SSH.NET包升级到2020.0.2及以上版本即可,你的原有代码无需做任何修改就能正常运行。

方案2(兼容旧版本):手动指定加密算法

如果受项目依赖限制无法升级SSH.NET版本,可以手动构造连接信息,将HMAC算法的创建逻辑替换为显式实例化的实现,绕开兼容性问题,修改后的代码如下:

public void Connect()
{
    string host = "xxxx.xx.xxx";
    int port = xx;
    string userid = "xxxx";
    string password = "xxxx";
    
    try
    {
        // 构造连接信息和密码验证方式
        var authMethod = new Renci.SshNet.PasswordAuthenticationMethod(userid, password);
        var connectionInfo = new Renci.SshNet.ConnectionInfo(host, port, userid, authMethod);
        
        // 替换HMAC算法的创建逻辑为显式实例化,规避HashName调用
        connectionInfo.HmacAlgorithms["hmac-sha1"] = () => new System.Security.Cryptography.HMACSHA1();
        connectionInfo.HmacAlgorithms["hmac-sha2-256"] = () => new System.Security.Cryptography.HMACSHA256();
        connectionInfo.HmacAlgorithms["hmac-sha2-512"] = () => new System.Security.Cryptography.HMACSHA512();
        
        connectionInfo.Timeout = TimeSpan.FromMinutes(1);
        var client = new Renci.SshNet.SftpClient(connectionInfo);
        
        if (!client.IsConnected)
        {
            client.Connect();
            Console.WriteLine("SFTP client connected successfully");
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

内容的提问来源于stack exchange,提问作者Kuntal Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:24:01