1. 环境介绍及效果展示
A. centos 6.6 x64
B. tftp-server 0.49
C. 脚本目录
D. 备份目录
E. 备份邮件
2. tftp服务配置
A. [root@steppingstone ~]# yum install tftp-server -y #安装服务
B. [root@steppingstone ~]# vim /etc/xinetd.d/tftp #修改配置文件
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s -c /backup #指定tftp目录
disable = no #开启服务
per_source = 11
cps = 100 2
flags = IPv4
}
C. [root@steppingstone ~]# mkdir /backup #创建tftp目录
D. [root@steppingstone ~]# chmod a+w -R /backup/ #添加读权限
E. [root@steppingstone ~]# chkconfig tftp on #开机自启
F. [root@steppingstone ~]# service xinetd restart #启动tftp服务
3. 编写调用expect的shell脚本backup.sh
A. [root@steppingstone backup]# vim backup.sh
1 #!/bin/bash 2 #write by William_Guozi in 2017.9.4 3 #循环读取device_tab.txt每一行内容, 格式: ip username passwd enpasswd 4 year=`date +'%Y'` 5 month=`date +'%m'` 6 day=`date +'%d'` 7 #创建备份目录 8 mkdir /backup/$year/$month/$day -p 9 #给备份目录添加写权限 10 chmod a+w -R /backup 11 for ip in `awk '{print $1}' device_tab.txt` 12 do 13 #读取该IP设备的 username passwd enpasswd 14 username=`awk -v IP="$ip" '{if(IP==$1)print $2}' device_tab.txt` 15 passwd=`awk -v IP="$ip" '{if(IP==$1)print $3}' device_tab.txt` 16 enpasswd=`awk -v IP=$ip '{if(IP==$1)print $4}' device_tab.txt` 17 #向expect脚本传送四个参数username ip passwd enpasswd 18 expect config_backup.expect $ip $username $passwd $enpasswd 19 #判断是否执行成功, 执行结果记入日志 20 #[ $? -eq 0 ] && echo "Device $ip backup Success!">> logname.txt || echo "Device $ip backup Failure!">> logname.txt 21 #判断备份文件是否存在, 存在, 则备份成功, 否则, 本分失败 22 [ -e /backup/$year/$month/$day/D-$ip ] && echo "Device $ip backup Success!">> logname.txt || echo "Device $ip backup Failure!">> logname.txt 23 done 24 #将日志信息发送邮件通知管理员 25 cat logname.txt | mail -s "Backup Result Reports" guojxb@wumart.com 26 #将日志送至垃圾箱 27 mv logname.txt /tmp/logname-`date +'%F'`.txt
4. 编写expect脚本config_backup.expect
A. [root@steppingstone backup]# vim config_backup.expect
1 #!/usr/bin/expect -f 2 #设定使用的shell是expect 3 #第一个参数为设备的ip地址 4 set ip [lindex $argv 0] 5 #参数数组expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数 6 #第二个参数为设备的用户名 7 set username [lindex $argv 1] 8 #第三个参数为设备的登录密码 9 set passwd [lindex $argv 2] 10 #第四个参数为设备的enable密码 11 set enpasswd [lindex $argv 3] 12 #时间戳 13 set year [exec date +%Y] 14 set month [exec date +%m] 15 set day [exec date +%d] 16 #设定超时时间, timeout -1为永不超时, 单位默认是秒 17 set timeout 5 18 #调用ssh登录 19 spawn ssh -l $username $ip 20 #对返回值的可能性进行判断, 如果是"yes/no"就回送yes\n,再回送登录密码; 如果是password, 就回送登录密码 21 expect { 22 "yes/no" { 23 send "yes\n" 24 expect "password" 25 send "$passwd\n" 26 } 27 "password" { 28 send "$passwd\n" 29 } 30 } 31 expect ">" 32 #回送enable命令 33 send "enable\n" 34 expect "Password" 35 #回送enable密码 36 send "$enpasswd\n" 37 expect "#" 38 #回送备份命令 39 send "copy startup-config tftp://192.9.205.111/$year/$month/$day/D-$ip\n" 40 # interact 41 expect "#" 42 #退出 43 send "exit\n" 44 expect eof 45 exit
5. 设备信息表device_tab.txt
A. [root@steppingstone backup]# vim device_tab.txt
1.1.15.5 root xxxxx xxxxxx
1.1.16.6 root xxxxx xxxxxx
1.1.18.8 root xxxxx xxxxxx
1.1.17.7 root xxxxx xxxxxx
1.1.19.9 root xxxxx xxxxxx
6. 设定定时任务
A. corntab -e
SHELL=/bin/bash
#指定环境变量
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
#指定工作目录
HOME=/root/backup
00 16 * * * bash backup.sh >> /var/log/backup.log