0

有没有人尝试在 JUNOS 路由器中使用 ruby​​ 和 net/ssh 和 net/ssh/telnet gems 来执行多个命令,你必须进入配置模式?它从不想接受配置命令,我不知道为什么。

这是我的代码:

def exec_router(host_type, commands)
  puts "commands: #{commands}"
  output = ""
  ssh = Net::SSH.start(HOST_MAP[host_type], QA_USER, :password => QA_USER_PASSWORD)
  t = Net::SSH::Telnet.new("Session" => ssh, "Prompt" => /.+@.+>/, "Output_log" => "/tmp/test.outputi")
  commands.each { |command| output << t.cmd(command) }
  puts output
  t.close
  ssh.close
end

这是它产生的输出:

  commands: ["configure", "show policy-options prefix-list greautomation-676872"]
  configure
              ^
  unknown command.

  {master:member0-re0}
  qa@c1.lab5> show policy-options
                   ^
  syntax error, expecting <command>.

qa@c1.lab5> 显示策略选项前缀列表 ^ 语法错误,应为 . qa@c1.lab5> 显示 policy-optionsprefix-listgreautomation-676872 ^ 语法错误,期待 .

我知道我的 ssh/telnet 工作正常,因为我可以用 t.cmd('?') 替换遍历命令数组的块,并且我得到了没有错误的预期输出。

我的 Junos 版本是 15.1F6-S3.8,我使用的是 ruby​​ 2.3.0。

提前致谢

克雷格

4

3 回答 3

1

你检查过https://github.com/Juniper/net-netconf吗?它是一个 Ruby Gem,用于与 Junos 设备进行基于 NETCONF 的交互。

于 2017-01-03T17:04:00.517 回答
0

尽管我建议您使用 RubyEZ 库,但您的问题与您尝试在操作模式下执行配置语法命令有关。

这是你的问题:

commands: ["configure", "show policy-options prefix-list greautomation-676872"]

进行以下更改:

  • 删除“配置”命令
  • 将“显示策略选项前缀列表 greautomation-676872”替换为“显示配置策略选项前缀列表 greautomation-676872”

这应该可以解决您的问题。

我强烈建议您查看 Juniper 的 RubyEZ 库。

于 2017-01-03T18:31:46.220 回答
0

你应该使用 RubyEZ。

参考:https ://github.com/Juniper/ruby-junos-ez-stdlib

要获取设备的配置,我们有 get-configuration rpc。

data = ndev.rpc.get_configuration                   # Junos specific RPC
puts "Showing 'policy-options' hierarchy ..."
puts cfgall.xpath('policy-options')  

调用可操作的 rpc(例如“显示机箱硬件”对应于 get-chassis-inventory rpc),因此

data = ndev.rpc.get_chassis_inventory  
于 2017-01-03T17:10:23.593 回答