C# 为使用SSH.NET SshClient.RunCommand执行的命令(cli)提供输入/子命令
我使用Renci SSH.NET库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时: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("
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在使用子命令时工作得非常好