C#中SshNet的SshConnectionException

时间:2017-09-13 05:18:52

标签: c# ssh scp

从我的脚本尝试连接到unix服务器以下载文件但得到以下错误..

  

Renci.SshNet.Common.SshConnectionException:客户端未连接。

我可以使用相同的凭据从WinScp正确连接到该服务器。

不确定这里出了什么问题。任何想法/指针?

代码

Renci.SshNet.Common.SshConnectionException : Client not connected.
at Renci.SshNet.Session.WaitOnHandle(WaitHandle waitHandle)
at Renci.SshNet.Session.Connect()
at Renci.SshNet.BaseClient.Connect()

错误

{{1}}

WinSCP Session Log

4 个答案:

答案 0 :(得分:2)

会话日志显示WinSCP正在使用sftp协议(WinSCP支持scp和sftp协议)。并非所有的sftp服务器都接受scp连接。切换到SftpClient类,然后使用UploadFile方法。

我还怀疑您是要在OpenRead()实例上调用FileInfo以获得流。

using (var client = new SftpClient(Config.UnixServer, Config.UnixUsername, Config.UnixPassword))
{
    client.Connect();
    client.UploadFile(new FileInfo(fileUpload).OpenRead(), fileName);
    client.Disconnect();
}

答案 1 :(得分:0)

也许有帮助?

也许与Unix路径有关?选中client.RemotePathTransformation = RemotePathTransformation.ShellQuote;

快速阅读here

  

默认情况下,SSH.NET对远程应用简单的引用机制   ScpClient中的路径。更确切地说,任何远程路径都包含在其中   将双引号传递给远程服务器上的scp命令之前   主机。

答案 2 :(得分:0)

也许不存在信任?在原始日志中,OP具有以下功能: 2017-09-14 09:10:17.495主机密钥与缓存的密钥匹配。

github页面:https://github.com/sshnet/SSH.NET 包含有关如何建立预期指纹的信息。

我遇到的另一个问题是,当服务器具有IP地址白名单并且服务器在其上,而我的测试环境不在时。

@Lee,正如Martin指出的那样,来自执行连接的应用程序的日志对于解决这类问题最有帮助。

答案 3 :(得分:0)

更新Renci参考库将解决此问题。