使用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 站点时,“服务器响应包含空字符”。
THE END
二维码