使用SSH.NET连接到OpenSSH7.4p1失败并显示“服务器响应在位置处包含空字符”但在WinSCP中有效

c#

我正在尝试使用 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);
}
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);
}

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

我不知道如何解决它,手动使用 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 中得到了修复。似乎他们甚至不认为这是一个错误,因为该更改未包含在7.5 发行说明中。

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


一个完全不同的问题可能会导致相同的错误消息:使用 SSH.NET 连接到端口 990 上的 FTP 站点时,“服务器响应包含空字符”


以上是使用SSH.NET连接到OpenSSH7.4p1失败并显示“服务器响应在位置处包含空字符”但在WinSCP中有效的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>