SSH.NET不在设备上执行命令

时间:2016-10-12 06:58:43

标签: c# ssh ssh.net

我正在尝试使用SSH.NET通过SSH发送一个简单的命令。即使是最简单的测试代码也会失败。这是一个片段。

[webviewInstance loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSURL URLWithString:[your_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]]];

using (var ssh = new SshClient("ip", port, "username", "password")) { ssh.Connect(); while (true) { var result = ssh.RunCommand("AT").Execute(); Console.Out.WriteLine(result); } } 命令应回显OK,但不是。相反,我收到SSH目标发出的自定义超时消息。我在超时消息中看到设备名称,它对应于它使用的提示,从中我可以得出结论,登录工作(也使用各种SSH程序测试),但命令本身未执行。我尝试在命令中添加AT\n,但没有结果。我做错了什么?

编辑1: 结果的输出是\r\n我认为Visual Studio将行结尾转换为Windows结尾。

编辑2: 使用Plink \r\nCommand Line Interface\r\nDeviceName> Custom idle timeout会产生与Visual Studio相同的输出。 Plink等待超时并终止,plink.exe username@ip -pw password "AT" > log.txt包含log.txt

使用PuTTY我看到了

\r\nCommand Line Interface\r\nDeviceName> Custom idle timeout
在您开始输入命令之前写入

。可能是在主机准备接收命令之前输入了命令,因此命令会挂起,直到有人反应出来?

1 个答案:

答案 0 :(得分:0)

您的服务器显然不支持SSH" exec"在SSH.NET SshClient.RunCommand方法和PLink的plink.exe command语法后面使用的通道。

实际上它支持它,但不正确。它似乎启动了一个交互式会话(shell),而不是执行命令。

要确认此假设,请尝试使用PLink:

echo AT| plink username@ip -pw password > log.txt

如果可行,您可能需要使用SshClient.CreateShell(SSH" shell"频道")而不是SshClient.RunCommand。虽然这通常是wrong approach,但由于服务器损坏,您需要采用这种方法。