天天看点

Cisco设备配置文件定期备份

Cisco设备配置文件定期备份

一、需求和应对之策

  公司IDC机房几台交换机和防火墙设备,因业务需要,经常在交换机上或防火墙上修改配置文件,虽说Cisco设备稳定性很好,但做好备份,可以防万一。

  网上有很多关于Cisco设备定期备份的文章,个人根据公司实际情况写了个备份脚本。

  个人采用自动交互expect获取Cisco设备的配置文件,让后通过FTP上传到FTP服务器。

  该脚本是放在Centos6.5服务器上,每周六晚上23:00执行。

二、线上脚本

1.脚本所在目录介绍

<code>[root@localhost cisco_bak]</code><code># pwd/usr/local/scripts/cisco_bak</code>

<code>[root@localhost cisco_bak]</code><code># ls</code>

<code>cfg  cisco_bak.sh  ip_asa.txt  ip_switch.txt  telnet_asa.exp  telnet_switch.exp</code>

<code>up_cfg.sh</code>

2.文件及目录介绍

  cfg是存放备份的Cisco设备的配置文件。

  telnet_switch.exp是通过Expect获取Cisco交换机的配置文件的。

<code>[root@localhost cisco_bak]</code><code># cat telnet_switch.exp </code>

<code>#!/usr/bin/expect</code>

<code>#This script is get switch cfg.</code>

<code>set</code> <code>timeout 60</code>

<code>set</code> <code>ip [lindex $argv 0]</code>

<code>set</code> <code>password [lindex $argv 1]</code>

<code>spawn </code><code>/usr/kerberos/bin/telnet</code> <code>$ip</code>

<code>expect </code><code>"Password:"</code>

<code>send </code><code>"$password\r"</code>

<code>expect </code><code>"&gt;"</code>

<code>send </code><code>"enable\r"</code>

<code>expect </code><code>"#"</code>

<code>send </code><code>"show running-config\r"</code>

<code>while</code> <code>{1} {</code>

<code>    </code><code>sleep</code> <code>1</code>

<code>    </code><code>expect {</code>

<code>    </code><code>"*More--"</code> <code>{send </code><code>" "</code><code>}</code>

<code>    </code><code>"*#"</code> <code>{</code><code>break</code><code>}</code>

<code>    </code><code>}</code>

<code>}</code>

<code>send </code><code>"exit\r"</code>

<code>expect eof</code>

  telnet_asa.exp是通过Expect获取Cisco防火墙的配置文件的。

<code>[root@localhost cisco_bak]</code><code># cat telnet_asa.exp </code>

<code>expect </code><code>"*assword:"</code>

<code>    </code><code>"*More ---&gt;"</code> <code>{send </code><code>" "</code><code>}</code>

  ip_switch.txt存放交换机的IP和密码。(我修改了,不能用公司的真实IP和密码。)

<code>[root@localhost cisco_bak]</code><code># cat ip_switch.txt </code>

<code>10.10.10.1   123</code>

<code>10.10.20.1   123</code>

  ip_asa.txt存放防火墙的IP和密码。(我修改了,不能用公司的真实IP和密码。)

<code> </code><code>[root@localhost cisco_bak]</code><code># cat ip_asa.txt 10.10.10.254    123</code>

<code>10.10.20.254    123</code>

  cat up_cfg.sh是将备份的配置文件上传FTP备份。(也可以通过其他途径备份到存储服务器。)

<code>[root@localhost cisco_bak]</code><code># cat up_cfg.sh </code>

<code>#!/bin/bash</code>

<code>#This script is upload cfg to Remote Computer.</code>

<code>TODAY=`</code><code>/bin/date</code> <code>+%F`</code>

<code>#Local Path</code>

<code>L_PATH=</code><code>/usr/local/scripts/cisco_bak</code>

<code>#date path</code>

<code>Date_PATH=`</code><code>/bin/date</code> <code>+%Y%m%d%H%M%S`</code>

<code>cd</code> <code>${L_PATH}</code>

<code>#$1 Ip,$2 User,$3 Passwd,$4 Remote_Path</code>

<code>/usr/kerberos/bin/ftp</code> <code>-i -n -</code><code>v</code> <code>&lt;&lt; !</code>

<code>open</code> <code>$1</code>

<code>user $2  $3</code>

<code>bin</code>

<code>passive</code>

<code>cd</code> <code>$4</code>

<code>lcd  ${L_PATH}</code><code>/cfg</code>

<code>mput *${TODAY}.cfg</code>

<code>bye</code>

<code>!</code>

  cisco_bak.sh是主程序,它将telnet_asa.exp 、telnet_switch.exp和up_cfg.sh整合到一个脚本中。

<code>[root@localhost cisco_bak]</code><code># cat cisco_bak.sh </code>

<code>#</code>

<code>TODAY=`</code><code>date</code> <code>+%F`</code>

<code>PATH=</code><code>/usr/local/scripts/cisco_bak</code>

<code>[ -d ${PATH}</code><code>/cfg/</code> <code>] || </code><code>/bin/mkdir</code> <code>-p ${PATH}</code><code>/cfg/</code>

<code>cd</code> <code>${PATH}</code>

<code>##ip.txt is stored in the user name and password.</code>

<code>#switch_bak</code>

<code>while</code> <code>read</code> <code>ip</code>

<code>do</code> 

<code>#IP_NAME is IP </code>

<code>IP_NAME=`</code><code>echo</code> <code>"$ip"</code> <code>| </code><code>/bin/awk</code> <code>'{print $1}'</code><code>`</code>

<code>/usr/bin/expect</code> <code>telnet_switch.exp $ip &gt; ${PATH}</code><code>/cfg/switch_</code><code>${IP_NAME}_${TODAY}.cfg</code>

<code>done</code> <code>&lt; ip_switch.txt</code>

<code>#asa_bak</code>

<code>#IP_NAME=`echo "$ip" | /bin/awk '{print $1}'`</code>

<code>/usr/bin/expect</code> <code>telnet_asa.exp  $ip &gt; ${PATH}</code><code>/cfg/asa_</code><code>${IP_NAME}_${TODAY}.cfg</code>

<code>done</code> <code>&lt; ip_asa.txt</code>

<code>##upload cfg to ftp</code>

<code>##/bin/bash ${PATH}/up_cfg.sh FTP_IP FTP_USER FTP_PASSWD FTP_PATH</code>

<code>/bin/bash</code> <code>${PATH}</code><code>/up_cfg</code><code>.sh 10.10.10.200 abc 123 </code><code>/home/abc/Cisco_Devices</code>

3.在linux上定期执行

<code>[root@localhost cisco_bak]</code><code># crontab -l</code>

<code>00 23 * * 6 </code><code>/bin/bash</code> <code>/usr/local/scripts/cisco_bak/cisco_bak</code><code>.sh  &gt;&gt; </code><code>/dev/null</code> <code>2&gt;&amp;1</code>

三、总结:

1.telnet_switch.exp和telnet_asa.exp很像,但在while循环中有区别,"*More--" {send " "}和"*More ---&gt;" {send " "}是不一样的。

2.有的防火墙需要用户名和密码才能登陆,可稍作修改telnet_asa.exp,传入三个参数:ip、name和passwd

3.可扩展:在备份失败时放送邮件通知管理员。

      本文转自独弹古调  51CTO博客,原文链接:http://blog.51cto.com/hunkz/1759138,如需转载请自行联系原作者