"The server response contains a null character" 使用 SSH.NET 连接到端口 990 上的 FTP 站点时

"The server response contains a null character" when connecting to FTP site on port 990 using SSH.NET

我正在尝试使用 Renci SSH.NET 连接到 FTP 站点并从我的 C# 应用程序下载文件。我可以使用 FileZilla 和 WinSCP(在 Windows 10 Pro 64)成功连接到主机,并通过 HTTP 连接(主机是 运行 CrushFTP),但无法弄清楚如何使用 SSH.NET 从我的 C# 应用程序成功连接。我收到此错误:

The server response contains a null character at position 0x00000004: 00000000 15 03 03 00....A server must not send a null character before the Protocol Version Exchange is complete.

我对 here, is that this problem appears to be an expected error. I've read the information suggested by the documentation at https://www.rfc-editor.org/rfc/rfc4253#section-4.2 的文档的看法,我“认为”我理解这意味着我尝试连接的主机可能没有正确配置。我的问题是,由于我无法更改主机的配置方式,是否有办法通过 SSH.NET 库解决此错误,或者我只是在使用 SSH.NET?

这是我的代码 - 试图简化到最低限度:

using System;
using Renci.SshNet;

namespace mysftp
{
    class Program
    {
        static void Main(string[] args)
        {
            string host = "myftps.hostname.com";
            string username = "myusername";
            string password = "securepassword";
            int port = 990;

            string remoteFolder = "/";

            using (SftpClient sftp = new SftpClient(host, port, username, password)) 
            {
                try
                {
                    Console.WriteLine("Attempting to connect to " + host + " ...");
                    sftp.Connect();
                    Console.WriteLine(sftp.ConnectionInfo.ServerVersion);
                    sftp.Disconnect();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
        }
    }
}

这是主机信息(来自 WinSCP 的远程服务器信息):

Remote system = UNIX Type: L8
File transfer protocol = FTP
Cryptographic protocol = TLS/SSL Implicit encryption, TLSv1.2
Encryption algorithm = TLSv1.2: ECDHE-RSA-AES256-GCM-SHA384, 2048 bit RSA, ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD

Compression = No
------------------------------------------------------------
Certificate fingerprint
<<fingerprint info redacted>>
------------------------------------------------------------
Can change permissions = Yes
Can change owner/group = No
Can execute arbitrary command = Protocol commands only
Can create symbolic/hard link = No/No
Can lookup user groups = No
Can duplicate remote files = No
Can check available space = No
Can calculate file checksum = Yes
Native text (ASCII) mode transfers = No
------------------------------------------------------------
Additional information
The server supports these FTP additional features:
  AUTH TLS
  AUTH SSL
  SSCN
  PBSZ
  PROT
  CCC
  CLNT
  EPSV
  EPRT
  MDTM
  MDTM YYYYMMDDHHMMSS[+-TZ];filename
  MFMT
  SIZE
  REST STREAM
  MODE Z
  LIST -Q
  SITE UTIME
  SITE MD5
  XMD5
  SITE MD5s
  SITE RANDOMACCESS
  MLST Type*;Size*;Modify*;Perm*;UNIX.owner*;UNIX.group*;
  UTF8

端口 990 用于通过隐式加密 TLS/SSL 连接(也称为隐式 FTPS)的 FTP 协议。 SSH.NET 是一个 SSH/SFTP 库。 FTPS 和 SFTP 是完全不同的东西。您不能将 SSH.NET 用于 FTPS。

隐含的FTPS是过时的东西。并非所有 FTP(S) 库都支持它。值得注意的是,内置 .NET FTP 实现不支持 FtpWebRequest.

因为您将不得不使用第 3 方库。参见 Does .NET FtpWebRequest Support both Implicit (FTPS) and explicit (FTPES)?


尽管大多数 FTP 服务器确实支持标准显式 FTPS(通过端口 21)。如果您的服务器有,请使用它,而不是旧端口 990。请参阅 FTPS (FTP over SSL) in C#

如果没有,请与服务器管理员联系以启用它。


另见


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