使用 SSH.NET 连接到 OpenSSH 7.4p1 失败 "The server response contains a null character at position" 但在 WinSCP 中有效

Connecting with SSH.NET to OpenSSH 7.4p1 fails with "The server response contains a null character at position" but works in WinSCP

我正在尝试使用 SSH.NET (2020.0.0) 连接到 SFTP 服务器。

我的代码看起来很简单:

try
{
    var x  = new ConnectionInfo(FtpIpAddress, 22, FtpUser,
        new PasswordAuthenticationMethod(FtpUser, FtpPw));

    using (var sftpClient = new SftpClient(x))
    {
       sftpClient.Connect();
       sftpClient.Disconnect();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

但是当我 运行 代码时,出现以下错误:

The server response contains a null character at position 0x00000028:  
00000000  53 53 48 2D 32 2E 30 2D 4F 70 65 6E 53 53 48 5F  SSH-2.0-OpenSSH_  
00000010  37 2E 34 70 31 20 44 65 62 69 61 6E 2D 31 30 2B  7.4p1 Debian-10+  
00000020  64 65 62 39 75 32 0A 00                          deb9u2..  
A server must not send a null character before the Protocol Version Exchange is complete.

我不知道如何解决它,当手动使用 WinSCP 时它工作正常,当使用 WinSCP.NET 时,它与代码一起工作也很好。但是我不能在 Linux 发行版上使用 WinSCP.NET。

所以有人知道出了什么问题吗?

SSH.NET (2020.0.0) 期望 SSH 服务器版本字符串以 CRLF (0D0A) 序列结尾。

您的服务器似乎只发送 LF (0A)。

WinSCP 更宽容 – 它对 LF 很满意。

查看OpenSSH源代码,似乎是OpenSSH 7.4p1(只有那个特定版本)只发送LF。旧版本没有这个问题。它在 OpenSSH 7.5 中得到修复。似乎他们甚至不认为这是一个错误,因为 change was not included in 7.5 release notes.

正如您自己发现的那样,SSH.NET 2016.1.0 也只对 LF 感到满意。

SSH.NET 2020.0.1 专门针对 this issue.

发布

可能导致相同错误消息的完全不同的问题:.