利用自动脚本快速备份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 = 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密�a�e�`,或��核心��。
b)��中型�登记�e�`,导致使用错误的备份脚本备份。
c)配置文件名�Q不��默�J。
修正错误:
第一类错误,修正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.