【问题标题】:Cannot connect remote SFTP using SSH.NET package in .Net Core无法使用 .Net Core 中的 SSH.NET 包连接远程 SFTP
【发布时间】:2021-09-09 23:23:00
【问题描述】:

我想连接到 SFTP 以从那里下载文件。我也可以通过网站和命令提示符(使用 ftp 命令)使用凭证登录 SFTP。现在,我想使用特定凭据从我的 .Net 代码连接它。

我正在使用 SSH.NET 版本 2020.0.1 和 .Net Core Runtime 版本 3.1.18 和 .Net Core SDK 版本 3.1.412,操作系统是 Windows (10.0.17763) 64 位。

在尝试通过 .Net Framework 连接 SFTP 时,我可以使用从 NuGet 下载的相同 DLL 版本轻松地进行连接。现在,当我为 .Net Core 项目使用相同的代码时,它会抛出异常。我已经从 NuGet 为 .Net Core 下载了相同的包版本。

下面是我的代码:

public void Connect()
{
    string host = "xxxx.xx.xxx";
    int port = xx;
    string userid = "xxxx";
    string password = "xxxx";
    
    try
    {
        Renci.SshNet.SftpClient client = new Renci.SshNet.SftpClient(host, port, userid, password);
        if (!client.IsConnected)
        {
            client.ConnectionInfo.Timeout = TimeSpan.FromMinutes(1);
            client.Connect();
            Console.WriteLine("SFTP client connected successfully");
        }
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

我在使用 .Net Core 时收到的异常消息如下:

通过操作 HashName 属性访问哈希算法不是 本平台支持。相反,您必须实例化其中一个 提供的子类型(例如 HMACSHA1。)

我在哪个地方做错了?任何帮助将不胜感激!

【问题讨论】:

  • 什么版本的 .NET Core?似乎已在 .NET Core 2.1 中修复 - github.com/dotnet/runtime/issues/22929
  • 嘿@MartinPrikryl 我正在使用 .Net Core 3.1 版,我也在我的帖子中更新了它。
  • 确保您拥有所有更新。该问题仅在 3.1 发布后才关闭。
  • 之前,.NET Core SDK 版本是 3.1.101。现在,我已经安装了 SDK 版本 3.1.412,.NET Core 运行时版本是 3.1.18。不过,我遇到了与上述相同的问题。

标签: .net-core sftp ssh.net


【解决方案1】:

经过大量变通后,我找到了解决方案。

SSH.NET 依赖于 SshNet.Security.Cryptography。

SSH.NET(版本 2020.0.1)指的是 SshNet.Security.Cryptography 版本为 1.3.0,而 SSH.NET(版本 2016.1.0)指的是 SshNet.Security.Cryptography 版本为 1.2.0。

I have updated SSH.NET version from 2020.0.1 to 2016.1.0.

可能会发生一些向后兼容性问题。为此,通过降低版本,它正在工作。

现在,上面的代码在 .NET Framework 和 .NET Core 上也能正常工作。使用 SFTP 连接时没有出现上述错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2019-05-30
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多