Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为使用SSH.NET SshClient.RunCommand执行的命令(cli)提供输入/子命令_C#_.net_Ssh_Ssh.net_Juniper - Fatal编程技术网

C# 为使用SSH.NET SshClient.RunCommand执行的命令(cli)提供输入/子命令

C# 为使用SSH.NET SshClient.RunCommand执行的命令(cli)提供输入/子命令,c#,.net,ssh,ssh.net,juniper,C#,.net,Ssh,Ssh.net,Juniper,我使用Renci SSH.NET库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时: client.RunCommand("cli"); 程序无限期地挂在这条线上 对发生的事情有什么解释吗 cli是一个用于Juniper交换机/路由器的命令。AFAIK,cli是一种shell/interactive程序。因此,我假设您尝试过这样做: client.RunCommand("cli"); client.RunCommand("

我使用Renci SSH.NET库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时:

client.RunCommand("cli");
程序无限期地挂在这条线上

对发生的事情有什么解释吗


cli
是一个用于Juniper交换机/路由器的命令。

AFAIK,
cli
是一种shell/interactive程序。因此,我假设您尝试过这样做:

client.RunCommand("cli");
client.RunCommand("some cli subcommand");
那是错误的
cli
将一直等待子命令,并且永远不会退出,直到您使用相应的命令(如
exit
)显式关闭它。退出后,服务器将尝试将
cli子命令作为单独的顶级命令执行,但也失败了


您必须将“cli子命令”提供给
cli
命令的输入。但遗憾的是,SSH.NET不支持使用
SshClient.RunCommand
/
SshClient.CreateCommand
接口提供输入。看


有两种解决方案:

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

      client.RunCommand("echo \"cli subcommand\" | cli");
    
  • 或者使用shell会话(否则不建议采用这种方法来自动执行命令)

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

      "cli\n" + "cli subcommand\n"
    
    有关示例代码,请参阅或


谢谢。ShellStream在使用子命令时工作得非常好