繁体   English   中英

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

[英]SSH.NET is not executing command on device

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

using (var ssh = new SshClient("ip", port, "username", "password"))
{
    ssh.Connect();
    while (true)
    {
        var result = ssh.RunCommand("AT").Execute(); 
        Console.Out.WriteLine(result);
    }
}

AT命令应该回显 OK 但没有回显。 相反,我收到了 SSH 目标发出的自定义超时消息。 我在超时消息中看到设备名称,它对应于它使用的提示,从中我可以得出结论,登录有效(也用各种 SSH 程序进行了测试),但命令本身没有执行。 我尝试将\\n\\r\\n到命令中,但没有结果。 我做错了什么?

编辑 1:结果的输出是\\r\\nCommand Line Interface\\r\\nDeviceName> Custom idle timeout我认为行尾是由 Visual Studio 转换为 Windows 的。

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

使用 PuTTY 我看到了

Using username "username".
username@host's password:

Entering character mode
Escape character is '^]'.

Command Line Interface
DeviceName> 

在您可以开始输入命令之前编写。 可能是在主机准备好接收命令之前输入命令,结果命令挂起直到出现一些反应?

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

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

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

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

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


Python/Paramiko 的类似问题:
在设备上使用 Paramiko exec_command 执行命令不起作用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM