一、背景
客戶要用,需求就是這麼簡單。簡單說一下吧。網絡設備太多了,傳統的手動備份網絡設備配置信息工作量越來越大,並且不易管理。由此就必須有一種比較簡單的方式了。
二、備份方式
一、cisco設備自帶kron命令+TFTP/FTP/HTTP
這種備份方式比較簡單,但是有一定的侷限性。因爲kron命令在比較新的IOS版本上纔有,有些說在12.3(4)以上纔有,我測試的版本是12.2(33),也有這個命令。
但是kron命令本身並不能自動按照當前日期來命名備份文件,所以還需要腳本來幫助wanc
原理圖:
操作步驟:
一、網絡設備操作:
使用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:[email protected] #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
三、好了看看備份效果吧
二、Shell腳本(Telnet/SSH)+TFTP/FTP/HTTP
這種方式適用於ISO版本過低,沒有kron命令的方式,原理就是通過在linux服務器上定時執行shell腳本登錄到網絡設備上備份配置信息到TFTP服務器實現網設備配置信息的自動備份。可以通過Telnet/SSh登陸,Telnet不安全,推薦SSH。如果你一定要用Telnet,那麼稍微修改一下腳本就可以了。
原理圖:
操作步驟
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,比較簡單,到這裏就結束了。來看一下效果。
OK,備份完成。