通过使用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
转载于:https://blog.51cto.com/johnsz/1603785