3

I created a program using Renci SSH.NET library. Its sending all the commands and reading the result normally. However, when I send the command below:

client.RunCommand("cli");

The program hangs on this line indefinitely.

Any explanation of what is happening?

The cli is a command is used on Juniper switches/routers.

4

1 回答 1

5

AFAIK,cli是一种外壳/交互式程序。所以我假设你试图做类似的事情:

client.RunCommand("cli");
client.RunCommand("some cli subcommand");

那是错误的。cli将继续等待子命令并且永远不会退出,直到您使用相应的命令(如exit)明确关闭它。并且在它退出后,服务器将尝试将其cli subcommand作为单独的顶级命令执行,但也失败了。


您必须将“cli 子命令”提供给命令的输入cli。但遗憾的是 SSH.NET 不支持使用SshClient.RunCommand/SshClient.CreateCommand接口提供输入。请参阅允许写入 SshCommand


有两种解决方案:

  • 使用服务器外壳的适当语法在服务器上生成输入,例如:

      client.RunCommand("echo \"cli subcommand\" | cli");
    
  • 或者使用 shell 会话(否则不推荐使用自动执行命令的方法)。

    使用SshClient.CreateShellStreamorSshClient.CreateShell并将命令发送到其输入:

      "cli\n" + "cli subcommand\n"
    

    有关示例代码,请参阅为使用 SSH.NET SshClient.CreateShellStreamC# 通过 SSH.NET 发送 Ctrl+Y执行的命令 (sudo/su) 提供子命令。

于 2019-08-27T06:42:38.873 回答