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

2 回答 2

1

问题是您将“提示”设置为与用户名匹配的表达式:(警告:那里有一个反斜杠,因此它实际上可能与 SERNAME 匹配:)

因此,当您执行 tn.cmd(pass) 时,它会发送密码,然后等待用户名:(或 SERNAME:)。

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

于 2010-08-13T21:51:14.420 回答
0

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

需要“网络/远程登录”

tn = Net::Telnet::new("Host" => "1.1.1.1", "Timeout" => 10000, "Prompt" => /[$%#>] \z/n)

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

于 2010-08-13T22:55:10.940 回答