2010-08-13 128 views
-1

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

需要“网/远程登录”

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') 

回答

1

的问题是,你设置“提示”,以匹配用户名的表达式:(警告:你有一个反斜杠那里,所以它可能确实匹配SERNAME :)

所以,当你做tn.cmd(通过)它发送密码,然后等待用户名:(或SERNAME :)。

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

+0

我会补充说他可能想用waitfor作为初始的用户名提示。 – 2010-08-13 21:57:03

0

因此,这是我根据您的建议使用的代码。由于

需要 '网/远程登录'

TN =净::远程登录::新( “主机”=> “1.1.1.1”, “超时”=> 10000, “提示”=>/[$%#>] \ z/n)

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