1. 程式人生 > >expect批量配置交換機

expect批量配置交換機

因為日常維護交換機上千臺,考慮到定期需要配置和備份交換機。自動配置交換機的的方式大概這麼幾種:

1、使用crt調取vbs指令碼語言;

2、ansible自動化平臺;

3、expect工具;

4、新版本的交換機可配置定期備份命令。

第一種方式使用過,比較簡單,缺點crt軟體收費;ansible平臺需要一定時間需要配置;考慮管理的交換機較為老舊,本次採用expect工具。

前期準備

1)centos7作業系統

2)   yum install -y expect  #安裝expect

3)yum install -y openssh-server #安裝ssh客戶端

配置思路

1)ip.txt 存放配置交換機的IP地址、使用者名稱、密碼、enable密碼和描述;

2)shell 迴圈調取需要配置交換機的ip,並調取expect指令碼;

3)expect 登入交換機執行配置命令及日誌記錄。

1、expect指令碼

vim sw_backup.exp

#!/usr/bin/expect

set timeout 3  #超時時間

set ipadd [lindex $argv 0]

set user [lindex $argv 1]

set passwd [lindex $argv 2]

set enpasswd [lindex $argv 3]

set description [lindex $argv 4]

log_file $description.[clock format [clock seconds]  -format "%Y-%m-%d"].log #收集日誌

spawn ssh [email protected]$a\ipadd   #ssh遠端

expect {

"(yes/no)" { send "yes\r"; exp_continue }   #第一次登入交換機需要確認

"*assword:" { send "$passwd\r" }

}

expect "*>*" { send  "'enable\r" }  #抓取超過螢幕長度的命令輸出

expect "*#*" { send  "'$enpasswd\r" }  #抓取超過螢幕長度的命令輸出

expect "*#*" { send  "'terminal length 0\r" }  #抓取超過螢幕長度的命令輸出

expect "*#*" { send  "show version\r" }

expect "*#*" { send  "show run\r" }

expect "*#*" { send  "show interface status \r " }

expect "*#*" { send  "show ip route \r " }

expect eof

exit

2、shell指令碼

vim backup.sh

#!/bin/bash

cat ip.txt | while read line  #使用while命令迴圈登入主機進行配置

do

ipadd=`echo ${line}|awk  '{print $1}'`  #ip地址

user=`echo ${line}|awk  '{print $2}'`

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

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

description=`echo ${line}|awk  '{print $5}'`

./sw_backup.exp $ipadd $user $passwd $enpasswd $description  #呼叫expect指令碼

done

注:

Linux Shell中有三種引號,分別為雙引號(" ")、單引號(' ')以及反引號(` `)。

其中雙引號對字串中出現的$、''、`和\進行替換;單引號不進行替換,將字串中所有字元作為普通字元輸出,而反引號中字串作為shell命令執行,並返回執行結果。具體含義如下:

雙引號(" "):在雙引號中,除了$, '', `和\以外所有的字元都解釋成字元本身。單引號(' '):在單引號中所有的字元包括特殊字元($,'',`和\)都將解釋成字元本身而成為普通字元。

反引號(` `):在反引號中的字串將解釋成shell命令來執行

3、ip地址表

vim ip.txt

192.168.3.154 ruijie 123456  ruijie ceshi

192.168.3.155 ruijie 123123  ruijie1 測試


4、FAQ

1、許可權不夠

[[email protected] ~]# ./sw_backup.exp

-bash: ./sw_backup.exp: Permission denied

解決方法:chmod -R 777 sw_backup.exp

2、shell迴圈語句,之前使用for測試過效果不好,最後使用while;

3、awk使用的引號要特別注意;