2

我正在将 SharpSSH 集成到现有的 .NET 2.0 项目中。所以不能切换到http://sshnet.codeplex.com/或者其他更新的库...

我拥有与设备进行单一连接的一切工作,并且可以毫无问题地运行命令和上传文件。

但是因为这个工具必须能够同时更新多个设备,所以应用程序同时启动多个sharpssh连接。然后一切都继续工作,但有时文件没有完全上传,并抛出错误“会话已关闭”。

SshTransferProtocolBase tx = new Scp(_hostname, _username, _password);
tx.Connect();
tx.OnTransferProgress += new FileTransferEvent(tx_OnTransferProgress);

tx.Put(sshSource.FullName, "/tmp/" + Path.GetFileName(sshTarget));
// --> tx.Put throws the error

当像这样用“new Sftp”替换“new Scp”时

SshTransferProtocolBase tx = new Sftp(_hostname, _username, _password);

错误消息是:“输入流已关闭”或“会话已关闭”

关于如何避免这种情况的任何想法?

非常感谢,弗兰克

4

2 回答 2

3

我一直在努力解决同样的问题。在多处理期间出现“会话已关闭”错误是 SharpSSH 的一个已知问题。此库不再更新。所以我建议你使用另一个SSH库,例如 SSH.NET:https://github.com/sshnet/SSH.NET

它很容易使用。一个例子:

SshClient sshobject = new SshClient(OSShostIP, OSSusername, OSSpassword);
sshobject.Connect();
sshobject.RunCommand("mkdir /home/nedim");
sshobject.Disconnect();
于 2012-12-28T07:33:04.393 回答
0

通过添加具有可定义的最大重试次数的重试循环来解决...

于 2013-11-22T15:10:15.713 回答