温馨提示×

Debian SecureCRT脚本编写入门

小樊
40
2025-11-27 01:58:47
栏目: 智能运维

入门概览

  • SecureCRT 提供脚本自动化能力,常用语言包括 VBScript、Python、JScript/Perl,可完成登录、批量执行、日志采集等任务。
  • Linux/Debian 环境中,脚本同样可用;若更偏好原生 SSH 自动化,也可在外部用 Python + Paramiko 实现,不依赖 GUI。
  • 建议先明确你的使用场景:是“在 SecureCRT 内自动化交互”,还是“脱离 GUI 的批量 SSH 执行”。

环境准备与脚本执行

  • 脚本录制与回放:在 SecureCRT 中先“开始录制”,完成一次手工操作后“停止并保存”,即可回放脚本,适合快速生成批量配置脚本雏形。
  • 在会话中直接运行脚本:打开目标会话,菜单 Script → Run,选择脚本文件即可执行;也可在脚本里用 ConnectInTab 打开新标签页并自动登录。
  • 交互窗口:菜单 View → Interact 可打开交互窗口,便于边写边试脚本片段(适合调试)。
  • 外部执行思路:若不使用 SecureCRT 的脚本引擎,可在 Debian 上用 Python + Paramiko 编写纯 SSH 客户端脚本,便于集成 CI/CD 或调度系统。

Python 入门脚本模板

  • 说明:以下模板演示“连接设备 → 等待提示符 → 执行命令 → 保存日志 → 处理分页”的完整流程。请将提示符(如 #、**>`)与命令按你的设备类型调整。
  • 关键点:
    • 使用 crt.Screen.WaitForString / WaitForStrings 同步等待关键字,避免“命令未回显就继续”的竞态。
    • 处理 ---- More ---- 分页时,匹配到“More”就自动发送空格继续。
    • 通过 crt.Session.LogFileName / Log(True) 开启按会话的日志,便于审计与回溯。
# $language = "Python"
# $interface = "1.0"

import time

def log_name():
    return time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())

def main():
    # 基本配置
    user = 'admin'
    passwd = 'your_password'
    host = '192.0.2.10'
    prompt = '#'  # 设备命令提示符,按需改为 '>' 等

    # 连接参数(示例为 SSH2)
    # 注意:SecureCRT 的 ConnectInTab 参数语法依版本而异,以下为常见形式
    connect_cmd = f"/SSH2 /L {user} /PASSWORD {passwd} {host}"
    tab = crt.Session.ConnectInTab(connect_cmd)
    time.sleep(1)

    # 等待登录完成(出现提示符)
    tab.Screen.WaitForString(prompt)

    # 开启日志
    ts = log_name()
    tab.Session.LogFileName = f"{ts}_{host}.log"
    tab.Session.Log(True)

    # 执行命令
    commands = [
        "show version",
        "show ip interface brief"
    ]
    for cmd in commands:
        tab.Screen.Send(cmd + "\r")
        # 等待命令回显完成:匹配提示符或分页提示
        idx = tab.Screen.WaitForStrings([prompt, "---- More ----"], 10)
        while idx == 2:  # 遇到分页
            tab.Screen.Send(" ")  # 继续翻页
            idx = tab.Screen.WaitForStrings([prompt, "---- More ----"], 5)

    # 结束
    tab.Session.Log(False)
    crt.Dialog.MessageBox("Done.")

main()
  • 常见对象与用途(便于扩展脚本):
    • crt.Screen:发送/接收、等待字符串、读取屏幕缓冲。
    • crt.Session:连接/断开、日志控制、会话属性。
    • crt.Dialog:弹窗输入/提示(如 InputBox/MessageBox)。
    • crt.Arguments:获取脚本启动参数(便于参数化主机、账号等)。

VBScript 入门脚本模板

  • 说明:VBScript 在 SecureCRT 中同样常用,语法直观,适合快速编写登录与批量命令脚本。
  • 关键点:使用 WaitForString 等待登录提示,用 Send 发送用户名/密码与命令;处理分页时匹配 “---- More ----” 并自动发送空格继续。
# $language = "VBScript"
# $interface = "1.0"

Sub Main
    Dim user, passwd, host, prompt
    user = "admin"
    passwd = "your_password"
    host = "192.0.2.10"
    prompt = "#"   ' 设备命令提示符,按需改为 '>'

    ' 连接
    crt.Session.Connect "/SSH2 /L " & user & " /PASSWORD " & passwd & " " & host
    crt.Screen.WaitForString "ogin:"

    ' 登录
    crt.Screen.Send "admin" & vbCrLf
    crt.Screen.WaitForString "assword:"
    crt.Screen.Send passwd & vbCrLf
    crt.Screen.WaitForString prompt

    ' 日志
    crt.Session.LogFileName = "c:\temp\" & host & "_" & Replace(Now, "/", "-") & ".log"
    crt.Session.Log True

    ' 命令
    crt.Screen.Send "show version" & vbCrLf
    crt.Screen.WaitForString prompt

    crt.Screen.Send "show ip interface brief" & vbCrLf
    crt.Screen.WaitForString prompt

    ' 分页处理
    Do
        Dim idx
        idx = crt.Screen.WaitForStrings(Array(prompt, "---- More ----"), 5)
        If idx = 2 Then
            crt.Screen.Send " "
        Else
            Exit Do
        End If
    Loop

    crt.Session.Log False
    MsgBox "Done."
End Sub
  • 常用 API 提示:
    • crt.Screen.WaitForString(“str”, timeout)crt.Screen.WaitForStrings(Array, timeout) 用于同步等待;后者返回匹配到的索引(从 1 开始),超时返回 0

调试与最佳实践

  • 同步与等待:将 crt.Screen.Synchronous 设为 True 可减少输出错位;配合 WaitForString/WaitForStrings 明确“下一步何时继续”。
  • 日志与审计:在关键会话上启用 Session.Log,并按时间/主机命名日志文件,便于回溯与对比。
  • 参数化与文件驱动:从 CSV/IP 列表 读取主机与账号,循环处理多台设备,降低维护成本。
  • 安全建议:避免在脚本中硬编码密码;优先使用 SSH 密钥、会话配置或凭据管理器;必要时对日志做脱敏处理。
  • 分页与慢设备:遇到 ---- More ---- 或设备回显慢时,适当延长超时或加入重试逻辑,确保命令完整执行。

0