SSH.NET没有在设备上执行命令

本文关键字:执行 命令 NET SSH | 更新日期: 2023-09-27 18:12:44

我试图通过SSH使用SSH.NET发送一个简单的命令。即使是最简单的测试代码也会失败。下面是一个代码片段:

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我认为行结束转换为Windows的visualstudio。

编辑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没有在设备上执行命令

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

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

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

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

如果可以,您可能需要使用SshClient.CreateShell (SSH shell"channel"),并将命令写入其输入流,而不是使用SshClient.RunCommand。虽然这通常是一种错误的方法,但由于您的服务器损坏,您需要采用这种方法。


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