2012-04-26 28 views
1

我希望能够使用ruby net-ssh gem对Juniper M10i路由器进行更改。但是,发送“配置”后,我无法发送任何配置命令。使用ruby gem net-ssh配置Juniper路由器

例如,登录到通过ssh路由器后,我想发出以下三个命令:

configure 
show system 
exit 

使用net-SSH文库,我已经尝试没有成功如下:

# net-ssh (2.3.0) 
require 'net/ssh' 

session = Net::SSH.start(host, user, :password => password) 
session.exec!('term length 0') 
session.exec!('term width 0') 

channel = session.open_channel do |ch| 
    puts "Channel open." 

    ch.on_close do |ch| 
    puts "Channel is closing!" 
    end 

    ch.on_data do |ch, data| 
    puts "Data #{data}!!!!!!!!!!" 
    end 

    ch.exec "configure" do |ch, success| 
    puts "FAIL: configure" unless success 
    end 

    ch.exec "show system" do |ch, success| 
    puts "FAIL: show system" unless success 
    end 

    ch.exec "exit" do |ch, success| 
    puts "FAIL: exit" unless success 
    end 
end 
session.loop 

在执行时,我得到以下的输出:

Channel open. 
FAIL: show system 
FAIL: exit 
Data Entering configuration mode 
!!!!!!!!!! 
Channel is closing! 

所以,我该怎么办正确PAS在“configure”之后是“show system”命令?

解决:

我偶然发现了下面的帖子:https://stackoverflow.com/a/6807178/152852

回答

2

立足岗位,https://stackoverflow.com/a/6807178/152852,额外的宝石“净SSH远程登录”规定,我的确切行为寻找。

require 'net/ssh' 
require 'net/ssh/telnet' 

session = Net::SSH.start(host, user, :password => password) 
t = Net::SSH::Telnet.new("Session" => session, "Prompt" => prompt) 

puts t.cmd 'configure' 
puts t.cmd 'show | compare' 
puts t.cmd 'exit' 
puts t.cmd 'exit' 
+0

反正是有避免指定的 “提示”?如果我没有正确指定“提示”,我的脚本将挂起。 – 2013-03-20 17:22:40

+0

您不必指定它带有默认值的提示,并且您可能会匹配默认值。 – 2013-05-02 15:09:33

+0

谢谢,提示性的东西和脚本挂了很久,让我感到困惑不已,直到我看看你的帖子。 +1 – 2014-06-19 07:27:10

1

我知道这是一个超级老问题,但作为参考,我发现了两个宝石库,包装的telnet /专为思科/瞻博网络交换机自动化SSH会话: