大多数情况下,我们都是选用python脚本来进行设备的备份配置: 通过python调用ssh相关的库去登陆设备,再做进一步的备份操作
但简单的python脚本面临着一些问题,一是将ssh的账户密码直接写在脚本文件中从安全角度考虑是不可行的;二是,如果将密码做成输入框,需要用户输入,又觉得失去了自动化的意义…
加之现在网络设备大多都放到了堡垒机上,登陆的时候堡垒机会直接跳转crt进行登陆,中间并无输密码的阶段
以本人浅薄的python基础,没有找到python抓取crt屏显的方式。这就不得不介绍一个实用且简单的伙计-VB语言了
脚本功能
该脚本的功能很简单,即在已连接网络/安全设备的情况下,运行脚本可自动保存一份配置文件至本机
脚本解析
创建文本
即在你的电脑上新建一个文本文档
指定文件名
创建一个交互窗口,使用户可输入保存下来配置的文件名
用户在这个交互窗口所输入的值肯定需要收集下来,所以我们定义一个变量为FileName
再将用户输入的值赋值给FileName
Dim FileName
FileName = InputBox("please input name of device","filename")
其中,InputBox函数中所对应的两个参数,可对比下面的演示图自行研究
构建主函数
我们现在已经实现了输入框、获取输入框的数据
这个数据我们需要在主函数中使用,创建一个主函数,VB的规范是以Sub Main为首,End Sub为尾
Sub Main
---我是代码---
---我是代码---
---我是代码---
End Sub
创建文件
我们需要在本机上创建一个文件,用来存放备份的配置
以在CRT上运行脚本为例
我们使用crt内置函数创建文件,使用FileName变量为文件命名
crt.session.LogFileName = "D:\" & FileName & ".txt" //定义文件位置与名称,其中的&符号可视作字符创的加号
Msgbox "文件将储存至" & crt.session.LogFileName //创建交互界面,告知用户文件将存到哪里
Set fso = CreateObject("Scripting.FileSystemObject") //创建这个文件
开启crt的相关功能
经过上述操作,我们已创建了文件,只剩下开始记录设备配置并写入文件了
所以,需要开启crt的功能,允许VB脚本来同步它的屏显代码
crt.session.Log(true) //开启会话日志功能
crt.Screen.Synchronous = True //开启屏幕同步
---对设备的操作步骤---
crt.Screen.Synchronous = False //关闭屏幕同步
crt.session.Log(false) //关闭会话日志功能
查看设备配置
我们已开启CRT的屏幕同步,接下来需要发送命令给设备执行,使得crt回显出配置
此处以华为设备为例,如其他厂商设备,可根据需求更改str1
//为str1赋值,display cur即为华为设备查看全部配置的命令:
str1 = "display cur "
//脚本将命令发送给crt去执行,输入命令之后要回车才会执行,此处的Chr(13)即是回车的意思
crt.Screen.Send str1 & Chr(13)
我们都知道,如果设备配置多的话,执行display cur之后还要按空格翻页,才能看到后面的配置,那脚本怎么知道什么时候该发送空格命令呢?
这里介绍一个函数crt.Screen.WaitForString,此函数用于辨别当前crt窗口回显中是否携带某个字符串,举个例子
crt.Screen.WaitForString(“AAAA”,1)
用于辨别当前回显中是否有AAAA,查询周期为1秒,1秒找不到就不找了。如果是
crt.Screen.WaitForString(“AAAA”)
代表无期限的一直在回显中找AAAA的字样
说回前面的问题,脚本怎么知道什么时候该发送空格命令。别忘了,如果命令一页显示不了,会出现**----More----**的提示
所以,我们利用这个特性,调用crt.Screen.WaitForString函数,再做个循环。脚本就能知道什么时候该发送空格命令,具体代码见下
//创建一个循环,如果在3秒内,找到了----More----的字样,就发送一个空格给CRT实现翻页
其中<>为不等号的意思
Do while (crt.Screen.WaitForString ("---- More ----",3) <> False)
crt.Screen.Send " " //发送一个空格给CRT实现翻页
Loop //循环结束
此处需要注意,3秒的这个周期是必要的,可以设置成其他秒,但是不能无限久,否则会跳不出循环
太古老的设备执行display cur中途会卡十几秒才能回显出后续配置,会导致脚本提前结束,针对这台设备新建个备份脚本,将查询周期延长即可解决
至此,这个脚本的基础功能就已经实现了
修改后缀
将脚本代码保存,把文本文档的后缀改成vbs即可在crt中运行
退出程序
不难发现,我们没有判别过交互窗口用户所输入的信息,如果用户当时点了取消,程序还是会自动执行,无法停止
因此,我们在主函数开始就增加一个IF语句,用于判断用户是否点了取消键
if FileName = "" then //灵活变通,如果用户点了取消,FileName的值就是空
Exit Sub //如果是空,就跳出主函数,结束程序
else //如果不为空
---正常执行函数---
end if //结束循环
至此,咱们的脚本就制作完了
如果用户输入的是SW,那么文件将被存放在D:\SW.txt,此处也可以按需求更改
为了用户与脚本的交互体验,可以适当加写提示框,切记需要注意各行代码格式缩进
全部代码
Dim FileName
FileName = InputBox("please input name of device","filename")
Sub Main
if IP = "" then
Exit Sub
else
crt.session.LogFileName = "D:\" & FileName & ".txt"
Msgbox "文件将储存至" & crt.session.LogFileName
Set fso = CreateObject("Scripting.FileSystemObject")
crt.session.Log(true)
crt.Screen.Synchronous = True
str1 = "disp cur "
crt.Screen.Send str1 & Chr(13)
Do while (crt.Screen.WaitForString ("---- More ----",10) <> False)
crt.Screen.Send " "
Loop
crt.Screen.Synchronous = False
crt.session.Log(false)
Msgbox "脚本已执行完,文件已储存至" & crt.session.LogFileName
end if
End Sub