用于telnet切换的Ruby脚本

时间:2012-05-18 09:20:34

标签: ruby telnet cisco

我创建了以下ruby脚本telnet到Cisco设备,telnet到Cisco设备并运行命令'show int status err'。

require 'net/telnet'

C3550_20_PterraEst = "192.168.244.20" #Enter the IP address here

USER = "user" #Enter username here

PASS = "password" #Enter password here

ENABLE = "password" #Enter enable password here

print "Selezionare il piano [0-1-2-All]: ";

# get the input from the console, 
val1 = gets;
tn = Net::Telnet::new("Host" => C3550_20_PterraEst,
"Timeout" => 5,
"Prompt" => /Username/ )
tn.cmd("\n#{USER}") 
tn.cmd(PASS) 
tn.cmd("sh int status err\n") { |c| print c }
exit

现在我希望那些Cisco设备输出(当我发送'show int status err'时)应该分配给我的脚本中的变量...我会更好地解释:

假设命令'show int status err'返回此值:

Int fa0 / 20 Int fa0 / 25

我想做一些事情,比如...... variable1 ='Int fa0 / 20,Int fa0 / 25' 然后在我的脚本中使用variable1。

以女巫的方式可以吗?

2 个答案:

答案 0 :(得分:1)

我认为你想做的不是:

tn.cmd("sh int status err\n") { |c| print c }

而是:

response = tn.cmd("sh int status err\n")

根据NET :: Telnet上的文档,Telnet#cmd返回响应。如果你传递一个块它也会产生对块的响应,但如果你想将响应存储在一个变量中,我的例子是最好的方法。

如果你想打印出对STD的反应,你应该能够做到这两点,如下:

response = tn.cmd("sh int status err\n") { |c| print c }

但是,如果tn.cmd(“sh int status err \ n”){| c | print c}给你一个错误,我的解决方案可能无法解决,直到你弄清楚它为什么会产生错误。如果您想要帮助进行故障排除,则应将其添加到评论中。

如上所述,如果您希望让脚本生成其他命令以响应telnet响应,您可能需要考虑使用[expect][1]

答案 1 :(得分:0)

在这一行tn.cmd("sh int status err\n") { |c| print c } c是命令返回的值,但因为它是一个局部变量,它存在于该块中。您可以使用instance variable来包含它,这将允许您在块外使用它。