转载自:http://blog.163.com/liang_0001/blog/static/82013603201172612615357/
二、 准备工作
2.1、 自动日志功能
2.1.1、 自动日志说明
开启自动日志功能后,就不要每次使用的时候手动保存日志,对于那些需要记录调试过程的工程师来说省了不少事,也相应的提高的工作效率。
2.1.2 自动日志步骤
1. 鼠标左击菜单选项Options 选择 Global Options;
2. 在General Default Session 下单击Edit Default Settings;
3. 选择Terminal里面的 Log file;
4. 通过下图大家可以很清楚看到其配置方法,具体参数可根据参数自定义。
注:参数的含义是:%S会话名称 %Y年 %M月 %D日 %h小时 %m分钟 %s秒 %H主机名称。
2.1.2、 自动日志敝端说明
自动日志一个重要作用是记录某个时刻操作了什么,因此要在On each line中加上年、月、日、时、分、秒;所以日志记录会带有时间戳如下:
[03-30-15:10:05]6506-A#show run
[03-30-15:10:05]System software version : 2.42(4) Build Jun 26 2006 Rel
但带时间戳的show run 就不能复制粘贴到secureCRT中去运行。每行都带有时间戳的话,行数太多不可能一行一行去删除,可以用下面的方法去做。
使用UltraEdit文本编辑工具,在菜单属性中有选择“列”中的“列模式”,选择第一行的时间戳,选择“列”中“删除列”,则所的有时间戳都被删除。
J 可根据自己的来定义是否需要在每一行中加时间参数。
2.2、 脚本录制功能
2.2.1、 脚本录制说明
此功能对那些需要维护设备较多且对每台设备所做的操作命令都相同的工程师非常有用,通过录制脚本,为后续自动化脚本做准备。
2.2.2、 脚本记录步骤
1. 鼠标左击菜单选项Script 选择 Start Recoding Script;
2. 调试结束后左击菜单选项Script 选择 Stop Recoding Script,并保存脚本。
三、 自动化脚本编写
3.1、 三段模式模板
从一个文件(目录为C:\Users\lilf\Desktop\ip.txt)里面自动读取设备IP地址,密码等,自动登录设备进入特权模式。
第一种情况:用户名+密码+特权密码方式
# $language = “VBScript”
# $interface = “1.0″
Sub Main
‘打开保存设备管理地址以及密码的文件
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt”,Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
‘读出每行
line = file1.ReadLine
‘分离每行的参数 IP地址 用户名 密码 特权密码
params = Split (line)
‘Telnet到这个设备上
crt.Session.Connect (“/TELNET ” & params(0))
‘输入telnet用户名和密码
crt.Screen.WaitForString “sername:”
crt.Screen.Send params(1) & vbcr
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(2) & vbcr
‘进特权模式
crt.Screen.Send “enable” & vbcr
‘输入特权密码
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(3) & vbcr
crt.Screen.waitForString “#”
ip.txt里相对应的IP地址、用户名、密码、特权密码,分别如下:
192.168.1.1 admin ruijie ruijie
192.168.1.2 admin ruijie ruijie
192.168.2.1 admin ruijie ruijie
……
第二种情况:密码+特权密码方式
# $language = “VBScript”
# $interface = “1.0″
Sub Main
‘打开保存设备管理地址以及密码的文件
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt”,Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
‘读出每行
line = file1.ReadLine
‘分离每行的参数 IP地址 密码 特权密码
params = Split (line)
‘Telnet到这个设备上
crt.Session.Connect (“/TELNET ” & params(0))
‘输入telnet密码
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(1) & vbcr
‘进特权模式
crt.Screen.Send “enable” & vbcr
‘输入特权密码
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(2) & vbcr
crt.Screen.waitForString “#”
ip.txt里相对应的IP地址、密码、特权密码,分别如下:
192.168.1.1 admin ruijie
192.168.1.2 admin ruijie
192.168.2.1 admin ruijie
……
脚本发送命令:
crt.Screen.Send”要发送的命令” & chr(13) //这个是回车,并且每行只发送一个命令。
如下,进入全局模式下,去掉OSPF进程号800
crt.Screen.Send “conf t” & chr(13)
crt.Screen.WaitForString “(config)#”
crt.Screen.Send “no router ospf 800″ & chr(13)
crt.Screen.WaitForString “(config)#”
crt.Screen.Send “end” & chr(13)
crt.Screen.WaitForString “#”
crt.Screen.Send “wr” & chr(13)
J 这样去写是相当困难的,所以我们可以用先录制好需要进行相关操作的脚本,打开那个录制好的,复制那些相关的命令。这样不用自己逐条手写了。
完成一台设备的操作之后,退出并进入下一台设备。
‘完成后退出
crt.Screen.waitForString “#”,3 //等待3S后如果没有其它操作,则自动断开
crt.Session.Disconnect
loop
crt.Screen.Synchronous = False
End Sub
四、 应用案例
4.1、 真实场景:
客户升级,客户有145台设备需要升级,其中有rgos.bin,也有少部分的rgnos.bin。
首先查找当前运行的是rgos.bin还是rgnos.bin
运行脚本,并记录日志到一个文本中,按2.1.2图即可
脚本如下:
# $language = “VBScript”
# $interface = “1.0″
Sub Main
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
line = file1.ReadLine
params = Split (line)
crt.Session.Connect “/TELNET ” & params(0)
crt.Screen.WaitForString “sername:”
crt.Screen.Send params(1) & vbcr
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(2) & vbcr
crt.Screen.Send “enable” & vbcr
crt.Screen.waitForString “#”
crt.Screen.Send “show ver” & vbcr
crt.Screen.WaitForString “#”
crt.Screen.Send vbcr
crt.Screen.waitForString “#”,3
crt.Session.Disconnect
loop
crt.Screen.Synchronous = False
End Sub
C:\Users\lilf\Desktop\ip.txt中的内容如下
10.243.124.1 XXXX XXXX
10.243.124.10 XXXX XXXX
完成show ver后,查看日记记录,找到当前运行的是rgnos.bin设备,并把他的IP地址从ip.txt中去掉,新建ip1.txt。
升级rgos.bin:
# $language = “VBScript”
# $interface = “1.0″
Sub Main
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
line = file1.ReadLine
params = Split (line)
crt.Session.Connect “/TELNET ” & params(0)
crt.Screen.WaitForString “sername:”
crt.Screen.Send params(1) & vbcr
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(2) & vbcr
crt.Screen.Send “enable” & vbcr
crt.Screen.waitForString “#”
crt.Screen.Send “copy tftp://10.14.192.13/R2700_94674_install.bin flash:rgos.bin” & vbcr
crt.Screen.WaitForString “UPGRADING OK.”
crt.Screen.WaitForString “#”
crt.Screen.Send vbcr
crt.Screen.waitForString “#”,3
crt.Session.Disconnect
loop
crt.Screen.Synchronous = False
End Sub
rgnos.bin的升级方法也是同样的。
在合适的时间重启:
# $language = “VBScript”
# $interface = “1.0″
Sub Main
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject(“Scripting.FileSystemObject”)
Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
line = file1.ReadLine
params = Split (line)
crt.Session.Connect “/TELNET ” & params(0)
crt.Screen.WaitForString “sername:”
crt.Screen.Send params(1) & vbcr
crt.Screen.WaitForString “assword:”
crt.Screen.Send params(2) & vbcr
crt.Screen.Send “enable” & vbcr
crt.Screen.waitForString “#”
crt.Screen.Send “reload in 1″ & vbcr
crt.Screen.WaitForString “#”
crt.Screen.Send vbcr
crt.Screen.waitForString “#”,3
crt.Session.Disconnect
loop
crt.Screen.Synchronous = False
End Sub
重启过程中用批量ping工具监视,重启完成后查看是否都正常。
4.2、 说明
注意事项:如果运行过程中telnet到一台不可达的设备后,则脚本会中断,刚需要人工去再次运行,故运行之前先用批量ping工具测试设备连通性。
以上是转自http://www.gtdlife.de/securecrt%E8%87%AA%E5%8A%A8%E5%8C%96%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.html
下面是我根据上面的文档编写的没有用户名的自动登录
# $language = "VBScript"
# $interface = "1.0"
Sub Main
'打开保存设备管理地址以及密码的文件
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,params
Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.OpenTextFile("C:\ip.txt",Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
'读出每行
line = file1.ReadLine
'分离每行的参数 IP地址 密码 特权密码
params = Split (line)
'Telnet到这个设备上
crt.Session.Connect ("/TELNET " & params(0))
'输入telnet用户名和密码
crt.Screen.WaitForString "assword:"
crt.Screen.Send "cisco" & vbcr
'进特权模式
crt.Screen.Send "enable" & vbcr
'输入特权密码
crt.Screen.WaitForString "assword:"
crt.Screen.send "cisco" & vbcr
crt.Screen.waitForString "#"
crt.Screen.Send "show ver" & vbcr
crt.Screen.waitForString "#"
crt.Screen.Send "clear counters" & vbcr & vbcr
crt.Screen.waitForString "#" ,300
crt.Session.Disconnect
loop
crt.Screen.Synchronous = False
End Sub