您的位置:首页 > 其它

利用自动脚本快速备份switch配置 推荐

2014-02-17 20:38 483 查看
利用自动脚本快速备份switch配置

问题陈述:
系统分析:
流程分析:
代码实现:
测试:
Bug:

问题陈述:
为支持公司现有业务运行,目前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()即可。此流程表达清楚,移植性强(如只需更改一条备份命令)。



代码实现:代码如下,关键语句已加粗。#$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 = 8Dim username,password,superpass,tftphostDim fso,ipSet fso =CreateObject("Scripting.FileSystemObject")'定义相同备份命令型号设备IP列表Dim hostlisthostlist = "hostlist.txt"'打开并读取登录用户名,密码,L3密码,TFTP hostSet conf =fso.OpenTextFile("config.txt",Forreading, False) username= conf.readlinepassword= conf.readlinesuperpass= conf.readlinetftphost= conf.readlineconf.close

Sub Main'打开设备管理地址的文件Set list =fso.opentextfile(hostlist,1)DO While list.AtEndOfStream <>True'读出每行ip = list.ReadLineOn Error Resume Next'Telnet到这个设备上crt.session.connect "/telnet "& ip,False'测试连接成功与否If(crt.session.connected) ThenCallLogin(username,password)Copytotftp(ip)crt.Session.Disconnect'Else'crt.Session.logfilename= "c:\2.txt"'crt.Session.logEnd ifLoopMsgBox "已完成备份"list.close'crt.quitEnd Sub
'登入并进入特权模式SubLogin(username,password)crt.Screen.Synchronous = TrueIf (Notcrt.screen.waitforstring("sername:",4)) Then crt.screen.send vbcrcrt.screen.waitforstring"sername:"End If
'输入telnet密码crt.Screen.Send username & vbcrcrt.Screen.WaitForString"Password:"crt.Screen.Send password & vbcr'进入特权模式crt.Screen.Send "super 3"& vbcrcrt.Screen.WaitForString"Password:"crt.Screen.Send superpass & vbcrcrt.Screen.waitForString ">"
'系统视图模式,for 3050,5012,5024,3026,但5148,3652需注释掉它crt.Screen.Send "system-view"& vbcrcrt.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,3552str1 = "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,3026crt.Screen.WaitForString "]"crt.Screen.Send vbcr
'for 5148,3652'crt.Screen.WaitForString">"'crt.Screen.Send vbcr
crt.Screen.Synchronous = FalseEnd 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息