通過使用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