有没有人尝试使用带有net / ssh和net / ssh / telnet gems的ruby在JUNOS路由器中执行多个命令,你必须进入配置模式?它永远不想接受配置命令,我不知道为什么。
这是我的代码:
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> show policy-optionsprefix-list ^ 语法错误,期待。 qa@c1.lab5> show policy-optionsprefix-listgreautomation-676872 ^ 语法错误,期待。
我知道我的ssh / telnet工作正在运行,因为我可以用t.cmd('?')替换遍历命令数组的块,并且我得到了没有错误的预期输出。
我的Junos版本是15.1F6-S3.8,我使用的是ruby 2.3.0。
提前致谢
克雷格
答案 0 :(得分:0)
您检查了https://github.com/Juniper/net-netconf吗?它是一个Ruby Gem,用于与Junos设备进行基于NETCONF的交互。
答案 1 :(得分: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(对于ex“show chassis hardware”对应于get-chassis-inventory rpc),因此
data = ndev.rpc.get_chassis_inventory
答案 2 :(得分:0)
虽然我建议您使用RubyEZ库,但问题与您尝试在操作模式下执行配置语法命令有关。
这是你的问题:
commands: ["configure", "show policy-options prefix-list greautomation-676872"]
进行以下更改:
这可以解决您的问题。
我强烈建议您查看Juniper的RubyEZ库。