C#中SshNet的SshConnectionException

问题描述 投票:3回答:4

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

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

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

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

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

错误

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

WinSCP Session Log

c# ssh scp
4个回答
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();
}

0
投票

也许这有帮助吗?

也许与unix路径有关?检查client.RemotePathTransformation = RemotePathTransformation.ShellQuote;

快速阅读here

默认情况下,SSH.NET为ScpClient中的远程路径应用简单的引用机制。更准确地说,任何远程路径在传递给远程主机上的scp命令之前都用双引号括起来。


0
投票

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

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

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

@Lee,来自执行连接的应用程序的日志对于弄清楚这些事情是最有帮助的,正如Martin所指出的那样。


0
投票

更新Renci引用lib将解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.