编写自动脚本来配置设备

时间:2017-03-17 05:12:02

标签: ruby perl shell networking scripting

我的要求是这样的:

我需要登录远程设备(比如Router / switch)并执行以下命令。

telnet xx.xx.xx.xx
//give password here
sys
interface g x/x/x
shut
desc free-port
exit

有数以百计的设备,我不能浪费时间在该死的东西上做100次。我需要编写一个自动化脚本来完成它。所以我的问题如下:

  1. 我使用Windows系统,那么最好的脚本语言是什么:Ruby / shell脚本/ perl? (我以前是ROR开发人员,所以我认识Ruby,Linux终端。现在我在网络域工作。)
  2. 我的想法是:将所有设备放入阵列并使用进行循环,逐个调用设备并执行上述命令。
  3. 我不知道脚本,所以请进一步指导我。我不知道从哪里开始。

3 个答案:

答案 0 :(得分:1)

第1步:确定程序的文件结构。

例如,这是最简单的结构

if_admin/
    |--config.yml
    |--run.rb

步骤2:编写一个配置文件或一堆配置文件,其中包含您需要在目标上运行的命令的不同部分。

例如,您可以使用如下的yaml文件:

xx.xx.xx.xx:
  password: s3cret 
  router-shelf: x
  slot: x
  port: x
yy.yy.yy.yy:
  ...

第3步:实施您想要做的事情

require 'yaml'
require 'net/telnet'

config = YAML.load_file('./config.yml')
config.each do |host, conf|
  telnet = Net::Telnet.new('Host' => host)
  telnet.login(conf['password'])
  telnet.puts <<-CMD
    sys
    interface g #{conf['router-shelf']}/#{conf['slot']}/#{conf['port']}
    shut
    desc free-port
  CMD
  telnet.close
end

答案 1 :(得分:0)

如果你可以使用expect脚本,那么你很幸运。

#!/usr/bin/expect

set timeout 60

set cmds [list "ssh host1 ..." "ssh host2 ..." "ssh host3 ..."]

foreach cmd $cmds {
    spawn -noecho bash -c $cmd
    expect {
        -re "password" {
            exp_send "$env(PASS_WORD)\"
            exp_continue
        }
        eof { wait } ; # at this time the last spawn'ed process has exited
    }
}

以上是上述脚本的粗略概念: -

set cmds [list....将用作列表来存储命令集。

foreach会迭代这些命令

spawn将为每个命令生成进程。您可以在bash中使用单个telnet编写多个命令,只需使用\(反斜杠)分解命令,因此它易于阅读和扩展。

只要遇到某些正则表达式,

expect块就会传递密码。

eof将等到spawn进程中的所有命令都完成。

set timeout -1将保持循环运行。我认为expect脚本的默认时间是 10secs

您可以为主机列表再创建一个foreach循环。

我认为这足以让您开始自动化过程。

答案 2 :(得分:0)

关于&#34;什么是最好使用的脚本语言&#34;的问题,我会说选择一个能够满足你所需要的和一个你习惯使用的语言。

如果你想使用Perl,你可以使用的一个模块是Net::Telnet。当然,你自己需要Perl。我建议使用Strawberry Perl,它应该已经安装了Net :: Telnet。

另一种可能的途径是使用putty,这是一个SSH和telnet客户端。您可以将其与TTY Plus结合使用,{{3}}提供了一个使用不同putty会话选项卡的界面。它允许您向多个putty会话发出命令。这是一种不会涉及大量代码编写的可能性。