核心概念:SecureCRT 脚本引擎
SecureCRT 自身包含一个 Python 解释器,你不需要在你的电脑上单独安装 Python,也不需要配置环境变量,你只需要将 Python 脚本文件(.py)放在 SecureCRT 的脚本目录中,然后通过 SecureCRT 的菜单或命令来运行它。

优点:
- 环境独立: 脚本可以在任何安装了 SecureCRT 的机器上运行,无需担心 Python 版本问题。
- 无缝集成: 脚本可以直接与当前活动的 SecureCRT 会话交互,获取连接信息、发送命令、接收输出。
- 功能强大: 可以利用
crt对象访问所有 SecureCRT 的功能和会话信息。
使用内置的 Script 菜单(最简单)
这是最直接的方法,适合测试和一次性任务。
步骤:
-
编写 Python 脚本 创建一个简单的 Python 脚本,
get_version.py。
(图片来源网络,侵删)# get_version.py # 这个脚本会连接到设备,并显示其版本信息 # 1. 获取当前活动的 SecureCRT 会话 session = crt.Session # 2. 获取连接的选项卡名称(通常是设备的主机名或IP) tab_name = session.Tab.Caption print(f"正在连接到: {tab_name}") # 3. 发送命令并等待输出 # 使用 crt.Screen 对象来与设备交互 # Send() 发送命令 # WaitForString() 等待特定的字符串出现,确保命令执行完成 crt.Screen.Send("show version" + "\n") # 发送 "show version" 命令,并加上回车 crt.Screen.WaitForString("#") # 等待命令提示符(通常是 # 或 >)出现 # 4. 获取命令的输出 output = crt.Screen.Get(crt.Screen.CurrentRow - 10, 1, crt.Screen.CurrentRow, 80) # 获取屏幕上的文本 # 5. 将输出写入文件 log_file = f"{tab_name}_version_log.txt" with open(log_file, "w") as f: f.write(output) print(f"版本信息已保存到: {log_file}") print("脚本执行完毕。") -
保存脚本 将上述代码保存为
get_version.py文件。强烈建议将其保存在 SecureCRT 的默认脚本目录中,这样方便管理和调用。- 默认脚本目录路径: 你可以在 SecureCRT 中通过
Options -> Scripting -> Script Paths查看,通常是:- Windows:
C:\Program Files (x86)\VanDyke Software\SecureCRT\Scripts - macOS:
/Applications/SecureCRT.app/Contents/Scripts - Linux:
/opt/vandyke/securecrt/Scripts
- Windows:
- 默认脚本目录路径: 你可以在 SecureCRT 中通过
-
在 SecureCRT 中运行脚本
- 打开一个到网络设备的会话(一台 Cisco 路由器)。
- 确保你已经登录到设备的 CLI 界面。
- 点击顶部菜单栏的
Script->Run。 - 在弹出的文件选择对话框中,找到并选择你刚刚保存的
get_version.py脚本。 - 点击“运行”。
-
查看结果 你会看到 SecureCRT 的屏幕输出脚本的
print语句,并且在 SecureCRT 的安装目录下会生成一个包含设备版本信息的日志文件。
使用命令行运行(适合自动化和批处理)
当你需要将脚本集成到更大的自动化流程中时,使用命令行运行会更加灵活。

步骤:
-
编写脚本 脚本编写方法与上面相同。
-
打开命令提示符或终端 在你的电脑上打开
cmd(Windows) 或Terminal(macOS/Linux)。 -
执行命令 使用
SecureCRT.exe的/script参数来指定并运行脚本。基本语法:
"C:\Path\To\SecureCRT.exe" /script "C:\Path\To\Your\Script.py"
示例:
"C:\Program Files (x86)\VanDyke Software\SecureCRT\SecureCRT.exe" /script "C:\Scripts\get_version.py"
重要提示:
- 指定会话: 默认情况下,命令行方式运行的脚本不会自动连接到某个会话,你需要让脚本自己处理连接。
- 使用
.vbs或.py作为启动器: 一个更常见的模式是,写一个简单的启动脚本(.vbs或另一个.py),这个启动脚本会打开一个或多个 SecureCRT 会话,然后调用你的主脚本,在 SecureCRT 的官方文档和示例库中有大量这样的例子。
将 Python 脚本绑定到按钮(最常用)
这是将常用功能固化为“一键操作”的最佳方式,极大提升工作效率。
步骤:
-
编写脚本 脚本编写方法与上面相同。
-
创建自定义按钮
- 在 SecureCRT 中,点击
Options -> Customizable Layouts。 - 在弹出的窗口中,选择
Toolbars标签页。 - 点击
New...按钮来创建一个新的工具栏,或者选择一个已有的工具栏进行编辑。 - 点击
Add...按钮。
- 在 SecureCRT 中,点击
-
配置按钮
- Caption: 给按钮起一个名字,"Get Version"。
- Icon: 可以为按钮选择一个图标。
- Action: 这是最关键的一步,选择
Run a script,然后点击Browse...,找到并选择你的 Python 脚本(get_version.py)。
-
保存并使用
- 点击
OK和Close保存设置。 - 你会在工具栏上看到这个新按钮。
- 以后,只要你想执行这个操作,只需确保目标设备的会话是活动状态,然后点击这个按钮即可。
- 点击
SecureCRT Python 脚本核心对象
要写出强大的脚本,你需要了解几个核心对象:
crt对象:脚本的根对象,提供对全局设置和功能的访问。crt.Screen: 与当前活动会话的屏幕进行交互(发送命令、读取输出)。crt.Session: 获取当前活动会话的信息(主机名、用户名、密码等)。crt.Dialog: 显示对话框,用于与用户交互(输入信息、选择文件等)。
tab对象:代表一个 SecureCRT 标签页。tab.Session: 获取该标签页对应的会话对象。tab.Caption: 获取标签页的名称。
screen对象:代表一个会话的屏幕。screen.Send("command"): 发送命令。screen.WaitForString("prompt"): 等待字符串出现。screen.WaitForStrings(["prompt1", "prompt2"]): 等待多个字符串中的任意一个出现。screen.Get(row_start, col_start, row_end, col_end): 获取屏幕指定区域的文本。screen.WaitForString("Press any key to continue", 5): 可以设置超时时间(单位:秒)。
进阶示例:自动备份设备配置
这个示例会自动登录到设备,进入特权模式,备份配置,并将配置保存到本地文件。
# backup_config.py
import os
import datetime
# --- 配置 ---
# 将你的设备登录信息放在这里,或者使用 crt.Dialog 让用户输入
# USERNAME = "admin"
# PASSWORD = "your_password"
# ENABLE_PASSWORD = "your_enable_password" # 如果需要
# --- 脚本主逻辑 ---
# 1. 获取当前会话
session = crt.Session
tab = session.Tab
screen = crt.Screen
# 2. 获取设备信息用于文件命名
hostname = tab.Caption
if not hostname or hostname.startswith("Telnet") or hostname.startswith("SSH"):
# 如果标签页名称不是主机名,可以尝试从提示符中提取
screen.Send("\n") # 发送一个回车,看看提示符是什么
screen.WaitForString("#", 2) or screen.WaitForString(">", 2)
prompt_line = screen.CurrentRow
hostname = screen.Get(prompt_line, 1, prompt_line, 20).strip().split("#")[0].split(">")[0]
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
backup_filename = f"{hostname}_config_{timestamp}.txt"
# 3. 发送备份命令
print(f"开始备份 {hostname} 的配置...")
# 示例针对 Cisco IOS 设备
# 你需要根据你的设备类型调整命令
try:
# 进入特权模式(如果不在的话)
if screen.WaitForString("#", 1):
print("已在特权模式。")
else:
screen.Send("enable\n")
# 如果有 enable 密码,在这里处理
# screen.WaitForString("Password:")
# screen.Send(ENABLE_PASSWORD + "\n")
screen.WaitForString("#", 5)
print("已进入特权模式。")
# 进入全局配置模式(可选,如果需要保存配置)
# screen.Send("configure terminal\n")
# screen.WaitForString("(config)#")
# 执行备份命令
screen.Send(f"show running-config\n")
screen.WaitForString("#") # 等待命令结束
# 4. 获取配置并保存
# 假设配置显示满了屏幕,需要分页
# 我们可以循环按空格直到最后一页
while True:
if screen.WaitForString("--More--", 1):
screen.Send(" ")
else:
break
# 获取所有配置文本
config_output = screen.Get(screen.CurrentRow - 1000, 1, screen.CurrentRow, 80) # 调整范围以获取完整输出
with open(backup_filename, "w", encoding="utf-8") as f:
f.write(config_output)
print(f"配置备份成功!文件已保存为: {os.path.abspath(backup_filename)}")
except Exception as e:
print(f"发生错误: {e}")
print("脚本执行完毕。")
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Script 菜单 | 简单直观,无需命令行 | 手动操作,无法自动化 | 测试脚本、一次性任务 |
| 命令行运行 | 可集成到批处理、CI/CD 流程 | 需要处理会话连接,较复杂 | 自动化运维、定时任务 |
| 绑定到按钮 | 一键执行,效率最高 | 需要手动配置一次 | 日常高频重复操作 |
最佳实践建议:
- 从官方示例开始: VanDyke 官方网站提供了大量高质量的 Python 和 VBScript 示例,是学习的最佳资源。
- 使用日志: 在脚本中多使用
print语句,或者将日志写入文件,这有助于调试。 - 处理超时和错误: 网络设备响应可能不稳定,使用
WaitForString的超时功能,并用try...except捕获异常,让你的脚本更健壮。 - 先在测试设备上运行: 在对生产设备执行任何自动化操作前,务必先在测试环境充分验证脚本。
希望这份详细的指南能帮助你在 SecureCRT 中顺利地使用 Python 进行自动化工作!
