Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37811
  • 博文数量: 13
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2014-01-21 18:30
文章分类
文章存档

2014年(13)

我的朋友

分类: 网络与安全

2014-02-19 11:23:56

问题陈述:

为支持公司现有业务运行,目前IT架构有超过200台交换机运行。为保证业务的不间断运行,需定期对交换机进行配置备份,以便在灾难恢复时进行快速恢复。按一般做法,需手动一台一台登入,备份,管理这些配置文件。以平均完成一台switch备份需耗时3分钟,按200台计,需耗时3*200=600分钟=10H。因耗时过长,目前只能每月备份核心层switch,分布层Switch不定期进行。这样不能保证备份配置为最新,可能造成灾难恢复时间延长,降低灾难恢复的正确性。故急需缩短备份时间,并提高备份的频率。


系统分析:

一般进行switch配置备份,我们使用SecureCRT加tftp32.exe,在命令行模式下进行备份。按公司现有Switch,发现备份命令大约分为4类,并且,我们发现SecureCRT中支持使用vb script进行一些批量操作。通过分析其语法,得出一般思路为,通过循环重复执行备份命令,使过程快速及简单。


流程分析:

备份流程见下图,sub main()读取Config.txt中的帐户,密码,L3密码,TFTP server ip;并以hostlist.txt中的switch ip逐一连线。再调用sub login(),登入并进入Super 3(或enable)模式,再调用sub copytotftp()进行备份,直至hostlist.txt中全部switch完成备份。从系统分析中可知,MSL现有switch备份有四类,在此流程中,config.txt与sub main()是不需要更改,只需根据不同类型switch更改login(),copytotftp()即可。此流程表达清楚,移植性强(如只需更改一条备份命令)。

wKioL1MCBMKQQUtkAAClap9exBQ528.jpg


代码实现:

代码如下,关键语句已加粗。

#$language = "VBScript"

#$interface = "1.0"

'本脚本实现功能:从config.txt文件读取设备IP地址,登入账户,密码,L3密码,TFTP Server,并自动根据hostlist.txt自动连接到设备上备份。自动将设备配置备份

'本脚本可根据不同型号,更改备份命令备份不同型号switch 配置

'bakupfor 3050,5012,5024,3026,3552


Const ForReading = 1, ForWriting = 2,ForAppending = 8

Dim username,password,superpass,tftphost

Dim fso,ip

Set fso =CreateObject("Scripting.FileSystemObject")

'定义相同备份命令型号设备IP列表

Dim hostlist

hostlist = "hostlist.txt"

'打开并读取登录用户名,密码,L3密码,TFTP host

Set conf =fso.OpenTextFile("config.txt",Forreading, False)

username= conf.readline

password= conf.readline

superpass= conf.readline

tftphost= conf.readline

conf.close



Sub Main

'打开设备管理地址的文件

Set list =fso.opentextfile(hostlist,1)

DO While list.AtEndOfStream <>True

'读出每行

ip = list.ReadLine

On Error Resume Next

'Telnet到这个设备上

crt.session.connect "/telnet "& ip,False

'测试连接成功与否

If(crt.session.connected) Then

CallLogin(username,password)

Copytotftp(ip)

crt.Session.Disconnect

'Else

'crt.Session.logfilename= "c:\2.txt"

'crt.Session.log

End if

Loop

MsgBox "已完成备份"

list.close

'crt.quit

End Sub


'登入并进入特权模式

SubLogin(username,password)

crt.Screen.Synchronous = True

If (Notcrt.screen.waitforstring("sername:",4)) Then

crt.screen.send vbcr

crt.screen.waitforstring"sername:"

End If


'输入telnet密码

crt.Screen.Send username & vbcr

crt.Screen.WaitForString"Password:"

crt.Screen.Send password & vbcr

'进入特权模式

crt.Screen.Send "super 3"& vbcr

crt.Screen.WaitForString"Password:"

crt.Screen.Send superpass & vbcr

crt.Screen.waitForString ">"


'系统视图模式,for 3050,5012,5024,3026,但5148,3652需注释掉它

crt.Screen.Send "system-view"& vbcr

crt.Screen.waitForString "]"

crt.Screen.Synchronous = False

'MsgBox "连接成功"

End Sub


'copyswitch config for h3c (3050,5012,5024,3026)

Sub copytotftp(ip)

crt.Screen.Synchronous = True

'MsgBox "进入备份"

Dim str1

'for 3050,5012,5024,3026,3552

str1 = "tftp put vrpcfg.txt //" & tftphost& "/" & ip & ".txt"

'for for 5148,3652,注意此二型号备份在用户视图下进行,故需注释掉sub login中视图模式部分

'str1 = "tftp " &tftphost & " put config.cfg " & ip &"_config.cfg"

crt.Screen.Send str1 & vbcr


'for 3050,5012,5024,3026

crt.Screen.WaitForString "]"

crt.Screen.Send vbcr


'for 5148,3652

'crt.Screen.WaitForString">"

'crt.Screen.Send vbcr


crt.Screen.Synchronous = False

End Sub


测试:

测试过程如下:

1)从zabbix中导出全部switch记录,使用ping测试其他连通性,确认现有在用switch IP list.保存为

2)按其记录名称(如S6-3FD-Q5148P-T-10.86.7.77)。把它拆分为型号,IP记录。并按型号,分成四类(详见注1)。保存为

3)测试备份。把分类后的IP导入到hostlist.txt,打开tftp32.exe,在SecureCRT中打开“脚本”->运行。选择相应的脚本,即开始备份。

4)把得出备份结果(成功备份的列表),与hostlist.txt中记录比较,把不能备份的IP记录到err表中。

5)逐一手动确认不能备份原因:

a)super 3密碼錯誤,或爲核心層。

b)記錄中型號登记錯誤,导致使用错误的备份脚本备份。

c)配置文件名稱不爲默認。

修正错误:

第一类错误,修正super 3密码错误,或把核心层switch单独出来备份。

第二类错误,修正记录并更新hostlist.txt,

第三类错误,可修正配置文件名称为默认名称。

6)更新switch IP list,再次测试备份。5分钟即完成全部分布层,接入层switch.


Bug:

1.暂不能对无法备份IP进行记录。(可能原因,密码错误,型号错误,配置文件不为默认)

2.暂不能对无法连线IP快速跳过,或记录。需等待1分钟左右。

3.Hostlist.txt中IP地址左右不能有空格。



注1:分类如下h3c_1(3050,5012,5024,3026,3552),h3c_2(5148,3652),cisico_1(2950,2970),cisico_2(2948,4006).

注2:config.txt包括username,password,L3 pass word,tftp server ip.
阅读(1572) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~