Writing Automated scripts to configure device

久未见 提交于 2019-12-13 07:20:04

问题


My requirement is like this:

I need to log in to a remote device (say Router/switch) and execute following commands.

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

There are Hundreds of devices for which I cannot waste time doing above damn thing 100 times. I need to write a automated script which does it. so My questions are as follows:

  1. I use Windows system, so What is the best scripting language to be used : Ruby / shell script / perl ? (I was formerly ROR Developer, so i know Ruby, Linux terminal. Now I am working in networking domain. )
  2. What I thought was : Put all Devices into an array and using for loop, call devices one by one and execute above said commands.
  3. I don't have knowledge of scripting, so please guide me further. I don't know where to start from.

回答1:


Step 1: decide the file structure of your program.

For example, this is the simplest structure

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

Step 2: write a config file or a bunch of config files that contain the different parts of the commands you need to run on the targets.

For example, you can use a yaml file like this:

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

Step 3: implement what you want to do

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



回答2:


If you can use expect script , you are in luck.

#!/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
    }
}

Here is the rough idea of above script :-

set cmds [list.... will be used as list to store set of commands.

foreach will iterate though those commands

spawn will spawn process for each of the command. you can write multiple command with single telnet in bash, just break down commands using \ (backslash) so it is easily readable and extendable.

expect block will pass password whenever it encounter certain regex.

eof will wait till all commands in spawn process are finish.

set timeout -1 will keep loop running. i think default time for expect script is 10secs.

You can create one more foreach loop for host-list.

I think this will be enough to get you started for your automation process.




回答3:


As to the question of "What is the best scripting language to be used", I would say go with one that does what you need and one that you're comfortable with using.

If you want to go with Perl, one module that you could use is Net::Telnet. Of course, you'll need Perl itself. I'd recommend using Strawberry Perl, which should already have Net::Telnet installed.

Another possible route is to use putty, which is a SSH and telnet client. You could combine that with TTY Plus, which provides an interface that uses tabs for different putty sessions. And it lets you issue commands to multiple putty sessions. This is one possibility that wouldn't involve a lot of code writing.



来源:https://stackoverflow.com/questions/42849669/writing-automated-scripts-to-configure-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!