从我的脚本尝试连接到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正在使用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();
}
也许这有帮助吗?
也许与unix路径有关?检查client.RemotePathTransformation = RemotePathTransformation.ShellQuote
;
快速阅读here
默认情况下,SSH.NET为ScpClient中的远程路径应用简单的引用机制。更准确地说,任何远程路径在传递给远程主机上的scp命令之前都用双引号括起来。
也许信任不存在?在原始日志中,OP具有:2017-09-14 09:10:17.495主机密钥与缓存密钥匹配。
github页面:https://github.com/sshnet/SSH.NET有关于如何建立预期指纹的信息。
我遇到的另一个问题是,当服务器有一个白名单的IP地址并且服务器在其上时,但我的测试环境不是。
@Lee,来自执行连接的应用程序的日志对于弄清楚这些事情是最有帮助的,正如Martin所指出的那样。
更新Renci引用lib将解决问题。