【问题标题】:File empty when downloaded using SSH.NET使用 SSH.NET 下载时文件为空
【发布时间】:2014-12-01 09:19:15
【问题描述】:

我正在使用 SSH.NET 从 SFTP 下载文件,这是我的代码:

string host = ConfigurationManager.AppSettings["SFTPDomain"];
string username = ConfigurationManager.AppSettings["SFTPUser"];
string password = ConfigurationManager.AppSettings["SFTPPass"];
string remoteFileName = ConfigurationManager.AppSettings["SFTPFileName"].ToString();

using (var sftp = new SftpClient(host, username, password))
{
    sftp.Connect();

    using (var file = File.OpenWrite(FilePath))
    {
        sftp.DownloadFile(remoteFileName, file);
    }

    sftp.Disconnect();
}

问题是下载了 csv 文件,但里面没有任何数据。我也更改了 remoteFile 路径,但仍然下载了包含空数据的文件。我尝试使用

检查文件是否存在
if (sftp.Exists(remoteFileName))
{
}

即使我用"pp" 更改remoteFileName,它也总是返回true。

谁能帮助我做错了什么?或者推荐我另一个库来从 SFTP 服务器下载文件。我尝试过 WinSCP,但出现主机密钥错误,因此我尝试按照服务器 tutorial 的指导传递正确的 SshHostKeyFingerprint。我仍然收到主机密钥错误。是否有任何简单的库我只需要从 SFTP 下载文件?

【问题讨论】:

  • 已经在尝试 sshnet
  • 关于 WinSCP 主机密钥问题:您链接到的教程是关于您的帐户私钥,而不是关于服务器(主机)密钥。请参阅Where do I get SSH host key fingerprint for use with scripting or .NET assembly? 上的 WinSCP 文章。请注意,接受任何主机密钥的 SShNet 默认行为是不安全的。使用 SshNet,您应该处理 HostKeyReceived 事件并验证主机密钥。 WinSCP 强制执行密钥验证以维护安全性。
  • 您是否尝试调试下载(因为 SshNet 是开源的)?你有服务器端日志吗?您要连接的服务器(软件)是什么?

标签: c# .net sftp ssh.net


【解决方案1】:

尝试使用:

using (Stream file = File.OpenWrite(FilePath))
{
    sftp.DownloadFile(remoteFileName, file);
}

在本地保存之前,您需要从远程服务器读取流。​​

【讨论】:

  • 为解决方案而不是规避点赞。
【解决方案2】:

我也遇到过同样的问题。使用 SSH.NET 的 ScpClient 而不是 SftpClient 对我有用。这是一个直接替换:

using (ScpClient client = new ScpClient(host, username, password))
{
    client.Connect();

    using (Stream localFile = File.Create(localFilePath))
    {
         client.Download(remoteFilePath, localFile);
    }
}

使用 ScpClient,您只能获得上传/下载功能,而不是 SFTP 的许多附加功能,但这对于您的用例来说可能已经足够了。

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多