2010-08-13 99 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