我使用 Renci SSH.NET 库创建了一个程序。它发送所有命令并正常读取结果。但是,当我发送以下命令时:
client.RunCommand("cli");
程序无限期地卡在这一行。
对发生的事情有任何解释吗?
cli
是 Juniper 交换机/路由器上使用的命令。
最佳答案
AFAIK,cli
是一种 shell/交互式程序。所以我假设你已经尝试过做类似的事情:
client.RunCommand("cli");
client.RunCommand("some cli subcommand");
这是错误的。 cli
将一直等待子命令并且永远不会退出,直到您使用相应的命令(如 exit
)明确关闭它。在它退出后,服务器将尝试将 cli 子命令
作为单独的顶级命令执行,但也失败了。
您必须将“cli 子命令”提供给 cli
命令的输入。但不幸的是,SSH.NET 不支持使用 SshClient.RunCommand
/SshClient.CreateCommand
接口(interface)提供输入。参见 Allow writing to SshCommand .
有两种解决方法:
使用服务器 shell 的适当语法在服务器上生成输入,例如:
client.RunCommand("echo \"cli subcommand\" | cli");
或者使用 shell session (否则不推荐使用自动执行命令的方法)。
使用
SshClient.CreateShellStream
或SshClient.CreateShell
并将命令发送到其输入:"cli\n" + "cli subcommand\n"
有关示例代码,请参阅 Providing subcommands to a command (sudo/su) executed with SSH.NET SshClient.CreateShellStream或 C# send Ctrl+Y over SSH.NET .
关于c# - 为使用 SSH.NET SshClient.RunCommand 执行的命令 (cli) 提供输入/子命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57666090/