SecureCRT支持三种类型的自动化脚本,vbs、javascript和python,书写语法如下。
vbs
# $language = "VBScript"
# $interface = "1.0"
Sub Main
.....
End Sub
Javascript
# $language = "JScript"
# $interface = "1.0"
function main() {
.....
}
python(需SecureCRT6.6以上才支持)
# $language = "Python"
# $interface = "1.0"
def main():
.....
main()
2. SecureCRT内置对象
SecureCRT提供了内置对象与脚本交互,这些对象封装了属性与操作,可用来操纵程序行为。其中crt是顶级对象,代表了 SecureCRT进程,其属性有ActivePrinter(打印机),Dialog,Screen,Session(会话),Version,Window(窗口) 这些二级对象,操作有 Sleep,Quit等。
2.1 Screen,操作屏幕的输入输出
要注意的是,Screen只代表客户区的可见部分,这部分的大小可以通过会话选项里的逻辑行、列数来设定。而整个会话的输出记录是回滚区,没有对应的对象;
属性:
CurrentColumn,CurrentRow(当前光标所在逻辑行)
因为逻辑行、列数限定了可见区的大小,所以当输出满屏时,CurrentRow 和 Rows 的值其实是一样的,都是最大值,不会随着屏幕输出再改变,这种设计实在是有些 egg hurt,不知能否通过设置来解决
Columns,Rows(可见区中的输出行数)
Synchronous(同步模式,据说为了避免某些情况下的数据丢失,建议开启)。
crt.Screen.Synchronous = True
crt.Screen.Synchronous = False
操作:
Clear清掉所有输出,包括回滚与提示符,直接变白板;
crt.Screen.Clear
Get 获取某个矩形区域内的输出文本,用行列数当坐标来指定;
crt.Screen.Get(row1, col1, row2, col2)
Get2 获取指定两行间的输出文本
crt.Screen.Get2(row1, row2)
ReadString获得命令的执行输出
char = crt.Screen.ReadString()
Send 发送命令字符串(包括换行符);
crt.Screen.Send “ps -ef|grep AppServer|grep -v grep” & vbCr
SendSpecial 用来发送 SecureCRT 的一些内置命令,如键映射
screen.SendSpecial “MENU_PASTE”
screen.SendSpecial “TN_BREAK”
screen.SendSpecial “VT_PF1”
WaitForString 等待输出某字符串,支持超时;
WaitForStrings 多个字符串中任何一个;
index = crt.Screen.WaitForStrings(“#” , “>” , 10)
返回值为为字符串的索引,从1开始,超时则返回0。
WaitForCursor 等待光标移动,
WaitForKey 等待任意键按下,
2.2 Session,提供当前会话接口
属性
Connected当前会话是否连接,返回bool值*
LocalAddress 返回本PC机IP*
RemoteAddress 返回会话 IP*
RemotePort返回会话端口*
LogFileName:设置或返回当前会话日志目录*
Logging:是否开启日志,返回bool值*
Path:当前会话开始的ini配置文件地址
操作:
Connect 连接会话;
crt.Screen. Connect arg
crt.session.Connect("/s mysession") ‘直接连接会话
crt.Session.Connect("/TELNET 214.25.28.25 23") ‘telnet 23号端口
cmd = "/ssh2 /L " & user &" /PASSWORD " & pwd & " /C 3DES " & ip
crt.Session.Connect cmd
/S session_name:开始SecureCRT并打开会话连接。
/SSH1 [ssh_options] hostname:以SSH1协议打开hostname连接。
[/C cipher]:标识加密技术,默认3DES;其他有NONE, DES, 3DES, RC4 和 BLOWFISH
[/I identityfile]:指定用户身份文件的位置。身份文件包含使用RSA身份验证连接到服务器所需的私钥。缺少此选项会导致使用密码验证。
[/L username]:用户名
[/P port]:端口,默认22
[/PASSWORD password]:密码
[/Z compressionlevel]:密码压缩级别,1-9
/SSH2 [ssh_options] hostname:以SSH2协议打开hostname连接。
[/AUTH method]:指定连接SSH2时的认证方法,多种方法用逗号隔开。语法:/AUTH password,publickey,keyboard-interactive,gssapi
[/LOCAL port:hostname:hostport]:将端口(本地主机)上的连接请求转发到主机名上的主机端口。
[/M MAC]:指定消息认证码
[/P port]:端口,默认22
[/PASSPHRASE passphrase]:登录到SSH2服务器上,使用PASSPRASH作为用/I选项给出的身份文件的密码。
[/PASSWORD password]:密码
[/REMOTE port:hostname:hostport]:将端口(本地主机)上的连接请求转发到主机名上的主机端口。请求SSH2服务器接受端口上的连接请求(在远程机器上)并将请求转发到主机名上的主机端口
[/Z compressionlevel]:密码压缩级别,1-9
/TELNET hostname [port]:开始SecureCRT并以Telnet协议打开hostname连接。
/RLOGIN hostname:以Rlogin协议打开hostname连接。
/TAPI phone number:开始SecureCRT并以TAPI协议打开会话连接。
/SERIAL port:以port打开默认会话。
Disconnect 断开会话;
crt.Session.Disconnect
Log 启用或禁用日志;
crt.Session.Log(start[,append,[raw]]) ‘参数均为bool变量,默认false
开始或停止记录取决于“start”参数的布尔状态。在开始日志记录时, “append”参数可以设置为true,打开日志文件时将以追加的方式记录(不删除指定的日志文件之前的内容); “raw” 参数设置为true,则将原始字符写入日志文件。append参数和raw参数是可选的,如果未指定,则为false(当“start”为false时,将忽略append和raw的值)。
2.3 Dialog,提供了输入框和 MessageBox
Prompt:提示用户输入
crt.Dialog.Prompt(message [, title [, default [, isPassword ]]])
pass = crt.Dialog.Prompt(“Enter your password:”, “Logon Script”, “”, True)
MessageBox:显示信息
crt.Dialog.MessageBox(message [, title [, buttons]])
‘button 参数选项
Const ICON_STOP = 16 ‘显示错误/停止图标。
Const ICON_QUESTION = 32 ‘显示“?图标
Const ICON_WARN = 48 ‘显示“! 图标
Const ICON_INFO= ‘显示“info” 图标
Const BUTTON_OK = 0 ‘‘显示OK按钮
Const BUTTON_CANCEL = 1 ‘显示OK和取消按钮
Const BUTTON_ABORTRETRYIGNORE = 2 ‘显示中止、重试和忽略按钮
Const BUTTON_YESNOCANCEL = 3 ‘显示是、否和取消按钮
Const BUTTON_YESNO = 4 ‘显示是、否按钮
Const BUTTON_RETRYCANCEL = 5 ‘显示重试和取消按钮
Const DEFBUTTON1 = 0 ‘第一个按钮是默认的
Const DEFBUTTON2 = 256 ‘第二个按钮是默认的
Const DEFBUTTON3 = 512 ‘第三个按钮是默认的
‘ MessageBox() 的返回值
Const IDOK = 1 ‘ OK 按钮被点击
Const IDCANCEL = 2 ‘取消 按钮被点击
Const IDABORT = 3 ‘中止 按钮被点击
Const IDRETRY = 4 ‘重试 按钮被点击
Const IDIGNORE = 5 ‘忽略 按钮被点击
Const IDYES = 6 ‘是 按钮被点击
Const IDNO = 7 ‘否 按钮被点击
‘ 例子
result = crt.Dialog.MessageBox("登录失败, 重试?", "错误", ICON_QUESTION Or BUTTON_YESNO Or DEFBUTTON2 )
If result = IDNO Then
Exit Sub
End If
2.4 Window,窗口
属性
Activate:标识当前SecureCRT窗口是否激活,返回bool值
Caption:设置或返回SecureCRT窗口的标题
State:返回SecureCRT窗口的显示状态。
0 – hidden 隐藏
1 – visible (normal) 可见(普通)
2 – minimized 最小化
3 – maximized 最大化
操作
Activate:激活SecureCRT窗口,置于桌面最顶层
Show:各种状态显示SecureCRT窗口。
如果脚本不需要交互的话,可以设置 crt. Window.show 0,隐藏窗口执行,但是对于高版本的SecureCRT来说,每个crt.session连接的时候都会显示一下窗口,然后才能调用crt. Window.show 0来隐藏窗口,非常不爽
2.5 Arguments,参数
访问参数,参数通过/ARG命令行传递。’ CRT.exe /ARG myhostname /ARG zxiptv
属性
Count:传递给SecureCRT的参数个数。
crt.Arguments.Count
操作
GetArg:激活SecureCRT,置于桌面最顶层
crt.Arguments.GetArg(number) ‘number从0开始
crt.Arguments(number)
3. SecureCRT6.6新增对象
相比 5.1,crt 多了些对象属性:Arguments(命令行参数),Clipboard(剪贴板),FileTransfer,操作上则添加了 tab 操作(标签页属性)和加强了错误处理(处理脚本出错但继续执行的情况),GetScriptTab比较常用,用来获得执行脚本所在的 tab 对象。其下的二级对象也加了不少属性和操作。
object.Get2(row1, col1, row2, col2),和 Get 的参数一个样。看描述, Get 获取的的是矩形区域内的文本,空白也被包括,而 Get2 会根据换行 \\r\\n 来判断行文本是否已结束,换行也被包括
ReadString 非常有用,可用来获得命令的执行输出,惯用法:
1. char = crt.Screen.ReadString() // 无参式,从输出中一次取一个字符
2. str = crt.Screen.ReadString(StringToWaitFor, TimeOutSeconds) // 超时可省略
2. str = crt.Screen.ReadString([“home”, “work”], 10) // [stringarray],类似 WaitForStrings
4. SecureCRT应用程序运行选项
cmd = “SecureCRT.EXE /Script c:\est.vbs /arg 129.0.31.27 /arg zxiptv”
命令行运行选项参数:
* /ARG argumnet:SecureCRT运行参数
* /SCRIPT filename:SecureCRT运行脚本。
* /COLOR_SCHEME scheme:指定现有的配色方案:指定与终端窗口相关联的各种颜色的会话设置的组合,包括前景和背景。要用于会话,会话是一组被分配给远程机器的连接的选项。这些设置和选项保存在会话名称下,并允许用户对不同主机有不同的偏好。开始。当使用此开关时,会话颜色方案的任何更改将被忽略。如果指定了不存在的方案,则将使用会话配置颜色方案。
*/F folderpathname:指向另一配置文件夹位置。如果在备用文件夹中没有配置文件,SeCuReRT将创建一个。如果没有此选项,SeCuReRT将使用默认文件夹位置的配置信息。
*/FIREWALL:使用当前全局防火墙设置连接会话。替换/代理和/ SOCKS选项。
*/MAX_COLS n:SecureCRT最大列数,范围,132—1024
*/NOMENU:隐藏菜单栏
*/NOTOOLBAR:隐藏工具栏
*/NOSAVE:设置不保存
*/POS x y:SecureCRT窗口位置
*/TITLEBAR “Title to display”: 将标题栏中的文本设置为以参数形式给出的字符串。
5. 举例
我们使用myscript.vbs脚本,在windows机器上先ssh到1.1.1.1,然后再从1.1.1.1 telnet到2.2.2.2,然后执行命令ifconfig。
windows下执行的命令为:
SecureCRT /SCRIPT myscript.vbs
myscript.vbs脚本内容为:
# $language = "VBScript"
# $interface = "1.0"
Sub Main
crt.session.Connect("/ssh2 /L root /PASSWORD rootaaa 1.1.1.1")
crt.screen.send "telnet 2.2.2.2" & Chr(13)
crt.screen.WaitForString "login:",10
crt.screen.send "root" & Chr(13)
crt.screen.WaitForString "Password:",10
crt.screen.send "rootbbb" & Chr(13)
crt.screen.WaitForString " $",10
crt.screen.send "ifconfig" & Chr(13)
End Sub下载本文