cisco網絡設備配置自動備份

一、背景

客戶要用,需求就是這麼簡單。簡單說一下吧。網絡設備太多了,傳統的手動備份網絡設備配置信息工作量越來越大,並且不易管理。由此就必須有一種比較簡單的方式了。

二、備份方式

一、cisco設備自帶kron命令+TFTP/FTP/HTTP

這種備份方式比較簡單,但是有一定的侷限性。因爲kron命令在比較新的IOS版本上纔有,有些說在12.3(4)以上纔有,我測試的版本是12.2(33),也有這個命令。

但是kron命令本身並不能自動按照當前日期來命名備份文件,所以還需要腳本來幫助wanc

原理圖:

 

kron

操作步驟:

一、網絡設備操作:

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:[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

三、好了看看備份效果吧

 

 

switch

 

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

這種方式適用於ISO版本過低,沒有kron命令的方式,原理就是通過在linux服務器上定時執行shell腳本登錄到網絡設備上備份配置信息到TFTP服務器實現網設備配置信息的自動備份。可以通過Telnet/SSh登陸,Telnet不安全,推薦SSH。如果你一定要用Telnet,那麼稍微修改一下腳本就可以了。

原理圖:

 

 

ssh

操作步驟

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,比較簡單,到這裏就結束了。來看一下效果。

 

ssh1

OK,備份完成。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章