通过使用expect工具以shell,来实现自动备份交换机配置的功能,从而提高工作效率。


软件:expect-5.44.1.15-4.el6.i686


目的:通过读取文件中的内容,自动登录网络设备,完成相应命令,最后将读取的配置信息,保存为文件。


以下是代码:

1、main.sh         #通过shell脚本来实现对文件内容的读取,并调用expect脚本来完成设备配置的读取与保存。


            #!/bin/bash


            for line in `cat /tmp/hosts.txt`                                      #逐行读取hosts文件内容

            do

                server=`echo $line |awk -F "|" '{print $1}'`

                login=`echo $line |awk -F  "|" '{print $2}'`

                passwd=`echo $line |awk -F "|" '{print $3}'`

                enpasswd=`echo $line |awk -F "|" '{print $4}'`

 

               ./get_switch_conf.exp $server $login $passwd $enpasswd

            sleep 3

            done


2、get_switch_conf.exp        #通过expect脚本来完成自动登录设备、读取信息、保存信息。


            #!/usr/bin/expect -f 


              if { $argc != 4 } {  

                  send_user "用法: $argv0 <server> <login> <password> <enpassword>\n"  

              exit  

              }  

   

           set timeout 1 

           set TERM ANSI  

  

           set SERVER [lindex $argv 0]  

           set LOGIN  [lindex $argv 1]

           set PASSWD [lindex $argv 2]  

           set ENPASSWD [lindex $argv 3]  

  

           spawn telnet  

           expect "telnet> "  

           send "open $SERVER\r"

           sleep 10

           expect "login:"

           send "$LOGIN\r"

           sleep 1

           expect "Password:"  

           send "$PASSWD\r"  

           sleep 1

           expect "*>"  

           send "en\r"  

           sleep 1  

           expect "Password:"  

           send "$ENPASSWD\r"  

           sleep 1  

           expect "*#"  


           log_file /var/log/[clock format [clock seconds] -format "%Y-%m-%d"].$SERVER.log    #生成文件,格式                                                                                                                                                         按时间+IP

           send "show run\r"  


          while (1) {  

                 sleep 1  

                   expect {  

                         " --More-- " { send " " }  

                         "*#" { break }  

                  }   

              }  

         send "exit\r"  

         interact

    

        3、host.txt

         10.207.*.*|admin|password|enpassword

         10.207.*.*|admin|password|enpassword