路由器备份脚本

时间:2010-08-13 20:16:48

标签: ruby cisco

我有以下代码连接到我的路由器就好了。问题是,一旦连接,我尝试传递永远不会传递给路由器的“sh ver”命令。谢谢你的帮助!

要求'net / telnet'

cisco = '1.1.1.1' #Enter the IP address here
user = 'admin' #Enter username here
pass = 'mypass' #Enter password here

tn = Net::Telnet::new('Host' => cisco, 'prompt' => /^\Username:/ )
tn.cmd('String'=>'admin', 'Match'=>/Password:/) { |c| puts c }
tn.cmd(pass) { |c| puts c }

------------------Does not work below this line---------------------
tn.cmd('String'=>'sh ver')

2 个答案:

答案 0 :(得分:1)

问题是你将'prompt'设置为一个与Username匹配的表达式:(警告:你有一个反斜杠,所以它实际上可能匹配SERNAME :)。

所以,当你执行tn.cmd(pass)时,它会发送密码,然后等待Username :(或SERNAME:)。

将“提示”更改为与您的cisco通常提示符匹配的正则表达式(成功登录后看到的提示)。

答案 1 :(得分:0)

所以这是我根据您的建议使用的代码。感谢

要求'net / telnet'

tn = Net :: Telnet :: new(“Host”=>“1.1.1.1”,                                “超时”=> 10000,                                “提示”=> / [$%#>] \ z / n)

tn.cmd('String'=>'admin','匹配'=> /密码:/){| c |把c}   tn.cmd('String'=>'pass','Match'=> /#/){| c |把c}   tn.cmd('String'=>'终端长度0','匹配'=> /#/){| c |把c}   tn.cmd('String'=>'sh run','Match'=> /#/){| c |把c}   tn.close