expect批量配置交換機

由於平常維護交換機上千臺,考慮到按期須要配置和備份交換機。自動配置交換機的的方式大概這麼幾種: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 登陸交換機執行配置命令及日誌記錄。

圖片.png

一、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部分交換機出現如下告警:

圖片.png

故障緣由交換機在建立祕鑰默認長度512過短,修改爲1024.

圖片.png

相關文章
相關標籤/搜索