由於平常維護交換機上千臺,考慮到按期須要配置和備份交換機。自動配置交換機的的方式大概這麼幾種:shell
一、使用crt調取vbs腳本語言;vim
二、ansible自動化平臺;centos
三、expect工具;bash
四、新版本的交換機可配置按期備份命令。ssh
第一種方式使用過,比較簡單,缺點crt軟件收費;ansible平臺須要必定時間須要配置;考慮管理的交換機較爲老舊,本次採用expect工具。ide
前期準備工具
1)centos7操做系統測試
2) yum install -y expect #安裝expectui
3)yum install -y openssh-server #安裝ssh客戶端centos7
配置思路
1)ip.txt 存放配置交換機的IP地址、用戶名、密碼、enable密碼和描述;
2)shell 循環調取須要配置交換機的ip,並調取expect腳本;
3)expect 登陸交換機執行配置命令及日誌記錄。
一、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 $user@$ipadd #ssh遠程
expect {
"(yes/no)" { send "yes\r"; exp_continue } #第一次登陸交換機須要確認
"*assword:" { send "$passwd\r" }
}
expect "*>" { send "enable\r" } #抓取超過屏幕長度的命令輸出
expect "**assword*" { 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
二、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命令來執行
三、ip地址表
vim ip.txt
192.168.3.154 ruijie 123456 ruijie ceshi
192.168.3.155 ruijie 123123 ruijie1 測試
四、FAQ
一、權限不夠
[root@192 ~]# ./sw_backup.exp
-bash: ./sw_backup.exp: Permission denied
解決方法:chmod -R 777 sw_backup.exp
二、shell循環語句,以前使用for測試過效果很差,最後使用while;
三、awk使用的引號要特別注意;
四、bash -x backup.sh 腳本執行檢查;
五、在liunx主機ssh部分交換機出現如下告警:
故障緣由交換機在建立祕鑰默認長度512過短,修改爲1024.