三分钟课堂-使用脚本自动备份网络设备配置


大多数情况下,我们都是选用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
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值