一、背景

客户要用,需求就是这么简单。简单说一下吧。网络设备太多了,传统的手动备份网络设备配置信息工作量越来越大,并且不易管理。由此就必须有一种比较简单的方式了。

二、备份方式

一、cisco设备自带kron命令+TFTP/FTP/HTTP

这种备份方式比较简单,但是有一定的局限性。因为kron命令在比较新的IOS版本上才有,有些说在12.3(4)以上才有,我测试的版本是12.2(33),也有这个命令。

但是kron命令本身并不能自动按照当前日期来命名备份文件,所以还需要脚本来帮助wanc

原理图:

 

cisco网络设备配置自动备份_tftp备份

操作步骤:

一、网络设备操作:

kron命令详细可参考http://www.cisco.com/c/en/us/td/docs/ios-xml/ios/cns/configuration/xe-3s/asr1000/cns-xe-3s-asr1000-book/cns-cmd-sched.pdf

使用kron命令配置自动备份任务计划
1、kron policy-list backup #创建任务计划
2、cli write #保存当前网络设备配置,以防止备份信息不完整
3、cli show run | redirect tftp://172.16.20.223/switch1.cfg #switch1.cfg为备份文件名,不同设备使用不同的备份文件名
4、exit
5、kron occurrence backup at 00:01 1 recurring #每月1日00:01执行备份
6、policy-list backup #启动计划任务
7、exit
使用do show kron schedule命令可以查看计划任务
1、do show kron schedule

二、TFTP服务器端操作步骤:

 

a)安装TFTP服务 
yum –y install tftp tftp-server
b)配置TFTP服务
修改/etc/xinetd.d/tftp文件,设置TFTP服务器的根目录为/backup/tftpboot/
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /backup/tftpboot -c #-c 允许客户端上传文件
        disable                 = no  #开启服务
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
c)创建TFTP服务器根目录
mkdir –pv /backup/tftpboot/backup
chmod o+w /backup/tftpboot
d)	启动TFTP服务器,设置开机自启动
service xinetd start
chkconfgi xinetd on
e)为了避免因权限带来的问题,关闭iptables和selinux
service iptables stop
stenforce 0
ckconfig iptables off
sed -i 's/^SELINUX=.*$/SELINUX=disabled/' /etc/selinux/config
f)创建备份文件自动重命名脚本 vi /backup/tftpboot/backup/switch.sh
 #!/bin/bash
#Program:Mv the backup file 
#Author:Myb
#Emali:myb_sir@126.com
#Version:1.0
#Date:2015-01-21
Date=`date +%F`
#备份目录
FileDir=/backup/tftpboot
#重命名之后文件所在目录
BackDir=/backup/tftpboot/backup
for file in `ls $FileDir`;do
    if [ -f ${FileDir}/${file} ] ; then
       mv ${FileDir}/${file} ${BackDir}/${Date}-${file}
    fi
done
g)赋予脚本执行权限,添加到任务计划每月一号零点一分执行备份脚本
chmod +x /backup/tftpboot/backup/switch.sh
echo '0 1 1 * * /bin/sh /backup/tftpboot/backup/switch.sh > /dev/null 2>&1' >> /var/spool/cron/root
这里我设置的是每月1号的01:00执行重命名脚本,以防备份设备过多,文件尚未备份就执行重命名,那么下次备份时会直接覆盖掉以前的文件造成备份文件丢失
chmod 600 /var/spool/cron/root
service cron restart

三、好了看看备份效果吧

 

 

cisco网络设备配置自动备份_网络设备备份_02

 

二、Shell脚本(Telnet/SSH)+TFTP/FTP/HTTP

这种方式适用于ISO版本过低,没有kron命令的方式,原理就是通过在linux服务器上定时执行shell脚本登录到网络设备上备份配置信息到TFTP服务器实现网设备配置信息的自动备份。可以通过Telnet/SSh登陆,Telnet不安全,推荐SSH。如果你一定要用Telnet,那么稍微修改一下脚本就可以了。

原理图:

 

 

cisco网络设备配置自动备份_cisco备份_03

操作步骤

TFTP服务器端操作步骤:(和第一种方式一样,需要多装一个expect)

 

yum -y install expect

创建交换机配置信息文件

vi /backup/tftpboot/switch.conf
cisco|172.16.20.1|cisco|cisco
cisco|172.16.20.2|cisco|cisco
说明:一共四列,中间用竖线分割。
第一列:交换机登录用户名;
第二列:交换机登录IP地址;
第三列:交换机登录密码;
第四列:交换机enable密码;
每一行为一台交换机的配置信息。

创建备份脚本

vi /backup/tftpboot/switch_backup.sh
#!/bin/bash
Date=`date +%F`
TFTP=172.16.20.223 #TFTP服务器IP地址,只需要改这一个
#我创建了两个模块,我解释一下,因为第一次访问的时候会提示你是否信任该主机,然后将该主机信息添加到known_hosts文件中,而以后访问的时候只要在known_hosts文件中发现有此主机,就不会再次询问,那么使用同一组expect语言就会报错,所以写了两个函数,一个用来第一次登陆,一个用来信任主机之后登陆,比较拙劣。
first_login() {
expect <<EOF
spawn ssh $name@$server 
expect "(yes/no)"
send "yes\r"
sleep 1
expect "Password:"  
send "$passwd\r"  
sleep 1
expect "*>"  
send "en\r"  
sleep 1  
expect "Password:"  
send "$enpasswd\r"  
sleep 1  
expect "*#"
send "copy startup-config tftp:\r"
expect "Address"
send "${TFTP}\r"
expect "Destination"
send "${server}-${Date}.conf\r"  
sleep 5
send "exit\r"  
interact
EOF
}
login() {
expect <<EOF
spawn ssh $name@$server 
sleep 1
expect "Password:"  
send "$passwd\r"  
sleep 1
expect "*>"  
send "en\r"  
sleep 1  
expect "Password:"  
send "$enpasswd\r"  
sleep 1  
expect "*#"
send "copy startup-config tftp:\r"
expect "Address"
send "${TFTP}\r"
expect "Destination"
send "${server}-${Date}.conf\r"  
sleep 5
send "exit\r"  
interact
EOF
}
for line in `cat /backup/tftpboot/switch.conf`
do
name=`echo $line |awk -F "|" '{print $1}'`
server=`echo $line |awk -F "|" '{print $2}'`
passwd=`echo $line |awk -F "|" '{print $3}'`
enpasswd=`echo $line |awk -F "|" '{print $4}'`
if grep "$server" $HOME/.ssh/known_hosts > /dev/null 2>&1;then
login
else
first_login
fi
  sleep 3
done

 

执行脚本、添加计划任务

chmod +x /backup/tftpboot/switch_backup.sh
echo '01 0 1 * * /bin/sh /backup/tftpboot/switch_backup.sh > /dev/null 2>&1' >> /var/spool/cron/root
chmod 600 /var/spool/cron/root
service cron restart

网络设备操作:

a) 配置登录用户名和密码,配置enable密码

b) 配置ssh v2版本登录

 

 

OK,比较简单,到这里就结束了。来看一下效果。

 

cisco网络设备配置自动备份_tftp备份_04

OK,备份完成。