【问题标题】:ChilkatDotNet2: connect to server SFTPChilkatDotNet2:连接到服务器 SFTP
【发布时间】:2017-09-21 11:09:10
【问题描述】:

在我的 C# 项目中,我包含了 ChilkatDotNet2.dll 以连接到 SFTP 服务器。目前,我尝试实现一个简单的连接方法,如下所示:

Chilkat.Ftp2 F = null;
F = (Chilkat.Ftp2)new Chilkat.Ftp2();
F.Hostname = "sftp.domain.com";
F.Username = "username";
F.Password = "password";
F.Port = 22;
F.AuthTls = true;

if (!(F.Connect())) {
    MainFrm.set_AlertMessage(F.ConnectFailReason); 
}

它总是无法连接,我总是收到错误 200,这意味着

已连接,但未能从 FTP 服务器接收问候语。

根据 Chilkat 文档。

我错过了什么?我试图连接到一个简单的 ftp 服务器测试(没有 SSL/TLS)并且它连接正确,所以我认为我遗漏了一些东西。 当我尝试使用 Filezilla 连接到 SFTP 服务器时,我获得的凭据是正确的。 谢谢。

更新

Chilkat.SFtp v_SFTP = null;
v_SFTP = (Chilkat.SFtp)new Chilkat.SFtp();
if (v_SFTP.Connect("sftp.domain.com", 22) {
    if (v_SFTP.AuthenticatePw("username", "password")) {
      IDVariant v_SUCCESS = null;
      bool v_SUCCESS = v_SFTP.InitializeSftp();
    }
}
else {
    MainFrm.set_AlertMessage(v_SFTP.LastErrorText); 
}

【问题讨论】:

  • 200 已完成,表示您的连接良好。所以服务器没有发送问候语。也许服务器没有发送问候语。当您使用 Filezilla 登录时,您收到了问候吗?
  • 我会使用像 wireshark 或 fiddler 这样的嗅探器来捕获 ChilkatDotNet2 和 Filezilla 的连接。我认为您缺少 http 标头,但不确定。
  • @jdweng:感谢您的友好回复。我正在尝试执行您向我建议的操作,但似乎 fiddler 无法从运行 .NET 代码的 Web 应用程序或 FileZilla 捕获任何有关 FTO 的信息。无论如何,我(必须)在部署之前使用 Cassini 在本地测试 Web 应用程序。这可能是问题吗?
  • FTP 使用 TCP 作为传输层。 WebBrowsers 具有使用 FTP 的能力。您正在使用使用 SCTP(流控制传输协议)的安全版本 SFTP(端口 22)。既然你得到了 200,这一切都没有真正的区别。通常,当您登录 FTP 站点时,通常会显示欢迎消息。您没有收到欢迎消息。服务器可能没有发送欢迎消息。你至少应该得到一个提示。有时您必须发送返回以获得欢迎消息。我怀疑发送了错误的回报(cr vs crlf)。

标签: c# ssl ftp sftp chilkat


【解决方案1】:
F = (Chilkat.Ftp2)new Chilkat.Ftp2();

Chilkat.Ftp2 是一个 FTP 客户端。它支持FTP协议。 SFTP 是一个完全不同的协议,只是恰好有一个相似的名称。

如果您想使用 Chilkat 连接到 SFTP 服务器,请查看 Chilkat.SFtp

【讨论】:

  • 谢谢你,非常感谢。现在我明白了,但我担心事情比预期的更糟。我按照您的建议编写了代码(如果您想查看我更新的答案),但收到此错误消息:“产品未解锁。请务必先调用 UnlockComponent”。所以事实证明 Chilkat 不是免费的。我不知道为什么当我尝试使用简单的 FTP 时它没有通知这一点。没有开发者测试许可证吗?像 SQL Server 2016 开发。如果我看到它运作良好,我会尝试说服我的老板购买许可证......
  • 我不是 C# 开发人员,因此推荐库的请求不在此处讨论。也就是说,除了 Chilkat 之外,还有其他 C# SSH/SFTP 客户端。