【问题标题】:C# SFTP No Such FileC# SFTP 没有这样的文件
【发布时间】:2016-07-21 05:21:43
【问题描述】:

我正在使用SSH.NET library 连接到远程 SFTP 服务器。我正在尝试使用非常基本的代码,但它不起作用

using (var client = new SftpClient(host, username, password))
{
    client.Connect();   
    client.ChangeDirectory(@"sftp://server.example.com/other_directory");
}

但是,这会在 ChangeDirectory 方法上引发 No Such File 异常。

我对 Curl 进行了同样的尝试,但出现错误提示

curl: (51) SSL 对等证书或 SSH 远程密钥不正确

但是,我添加了 curl 的 --insecure 参数,一切正常。

--insecure 部分是否与SSH.NET 库不工作的原因有关,还是有其他原因?有没有办法模拟 --insecure 在 C# 中的作用?

谢谢

【问题讨论】:

  • 在我看来,sftp://server.example.com/ 拒绝了您的安全连接。所以这可能是一个配置问题,而不是你在客户端做错了什么。
  • 一开始我认为可能是这种情况,但我可以通过 curl 和我机器上的其他第三方工具访问它,所以我认为它会在我身边?
  • 使用像wireshark或fiddler这样的嗅探器捕获数据,并比较工作和非工作应用程序的结果。通常问题在于 html 标头的差异。
  • @jdweng 好主意,谢谢!
  • 修复了,答案贴在下面

标签: c# curl ftp sftp ssh.net


【解决方案1】:

如果其他人遇到这个问题,事实证明,任何方法(例如 ChangeDirectory 和 UploadFile)都需要一个相对于 WorkingDirectory 属性的路径。结果,我通过将其更改为来解决了我的问题

client.ChangeDirectory(@"/other_directory");

希望对其他人有所帮助

【讨论】:

  • /other_directory 是绝对路径,不是相对路径。关键是这些方法需要路径,但您却提供了 URL。
  • 我以为是相对路径?它相对于工作目录coffeecup.com/help/articles/absolute-vs-relative-pathslinks
  • 那篇文章是错误的。它说的是“路径”,但实际上是关于 URL。我们在这里讨论路径,而不是 URL。相对于工作目录的路径不能以斜杠开头。
【解决方案2】:

在我的情况下,问题是用户“用户名”的权限。 var client = new SftpClient(主机、用户名、密码)

因此,用户“用户名”必须对文件夹 other_directory 具有必要的权限,以下代码才能正常工作。

client.ChangeDirectory(@"/other_directory");

【讨论】:

    最近更新 更多