SecureCRT Python脚本编写入门:从环境配置到实战自动化
SecureCRT Python脚本编写是网络运维人员提升效率的核心技能。SecureCRT从7.0版本开始内置Python脚本引擎,支持通过crt对象与终端会话交互,实现批量命令执行、日志自动采集、设备巡检等自动化任务。本文面向新手用户,从脚本运行环境的配置讲起,逐步介绍crt核心API的使用方法,并给出两个可直接运行的实战脚本——批量设备巡检和自动日志采集。同时覆盖常见报错的排查思路,帮助你快速上手SecureCRT Python脚本编写,告别重复的手工操作。
为什么要用SecureCRT编写Python脚本
日常网络运维中,登录几十台甚至上百台设备执行相同命令是常态。手动逐台操作不仅耗时,还容易遗漏或出错。SecureCRT自7.0版本起内置了Python脚本引擎(支持Python 2和Python 3,具体取决于安装版本),允许用户通过脚本直接控制终端会话,把重复劳动交给程序完成。
SecureCRT Python脚本编写的核心价值在于:脚本可以调用内置的`crt`对象,向远程设备发送命令、等待特定输出、读取屏幕内容、操作多个标签页会话。这意味着你不需要额外安装Paramiko或Netmiko等第三方库,仅靠SecureCRT自身就能完成大部分自动化任务。对于刚接触自动化的新手来说,这是门槛最低的起步方式之一。
脚本运行环境配置
在编写第一个脚本之前,需要确认环境已正确配置。
打开SecureCRT,进入菜单 Options → Global Options → General → Default Session → Edit Default Settings → Terminal → Mapped Keys,确认没有快捷键冲突。接着检查脚本引擎:进入 Script → Script Engine,确认当前使用的是Python引擎。如果你安装的是SecureCRT 9.x版本,默认已捆绑Python 3解释器,无需单独安装Python环境。
建议在本地创建一个固定的脚本目录,例如`D:\SecureCRT_Scripts\`,然后在 Options → Global Options → General → Script Directory 中指定该路径。这样通过 Script → Run 执行脚本时,SecureCRT会直接定位到这个目录,省去每次手动浏览的麻烦。
写一个最简单的测试脚本验证环境是否正常:
```python # test_hello.py crt.Dialog.MessageBox("环境配置成功,可以开始编写脚本了!") ```
通过 Script → Run 选择该文件,如果弹出对话框,说明环境就绪。
crt对象核心API速查
SecureCRT Python脚本编写的所有能力都围绕全局`crt`对象展开。掌握以下几个常用属性和方法,就能覆盖大多数运维场景:
`crt.Session.Connect("/SSH2 /L username /PASSWORD password /C 3DES-CBC hostname")`——通过脚本发起SSH连接,参数中可指定协议、用户名、加密算法等。
`crt.Screen.Send("show version\n")`——向当前会话发送命令,`\n`表示回车。
`crt.Screen.WaitForString("#", 10)`——等待屏幕出现`#`提示符,超时时间10秒。超时未匹配会返回False,可用于判断设备是否响应异常。
`crt.Screen.ReadString("#")`——读取屏幕内容直到遇到指定字符串,返回值就是这段输出文本,适合用来采集命令结果。
`crt.GetTab(index)` 和 `crt.GetTabCount()`——操作多标签页会话,实现跨设备批量执行。
记住一个原则:Send负责"说话",WaitForString负责"听",ReadString负责"记录"。三者配合就是一个完整的交互循环。
实战场景一:批量设备巡检
假设你需要登录多台交换机执行`show version`和`show interface status`,并将结果保存到本地文件。以下脚本可直接使用:
```python # batch_check.py import os
devices = ["192.168.1.1", "192.168.1.2", "192.168.1.3"] commands = ["show version", "show interface status"] output_dir = r"D:\SecureCRT_Scripts\output"
if not os.path.exists(output_dir): os.makedirs(output_dir)
for ip in devices: try: cmd_str = "/SSH2 /L admin /PASSWORD admin123 /ACCEPTHOSTKEYS " + ip crt.Session.Connect(cmd_str) crt.Screen.WaitForString("#", 15)
result = "" for cmd in commands: crt.Screen.Send(cmd + "\n") crt.Screen.WaitForString("#", 15) result += crt.Screen.ReadString("#") + "\n"
filepath = os.path.join(output_dir, ip.replace(".", "_") + ".txt") with open(filepath, "w") as f: f.write(result)
crt.Session.Disconnect() except Exception as e: crt.Dialog.MessageBox("连接 " + ip + " 失败: " + str(e)) ```
运行前将`devices`列表替换为实际IP,修改用户名密码。脚本会依次连接每台设备,执行命令,将输出保存为独立文件。
实战场景二:自动日志采集与常见报错排查
另一个高频需求是定时采集设备日志。可以结合SecureCRT的`crt.Screen.Synchronous`属性确保命令按顺序执行:
```python # log_collect.py crt.Screen.Synchronous = True
crt.Screen.Send("terminal length 0\n") crt.Screen.WaitForString("#", 10)
crt.Screen.Send("show logging\n") log_output = crt.Screen.ReadString("#", 30)
filepath = r"D:\SecureCRT_Scripts\output\device_log.txt" with open(filepath, "w") as f: f.write(log_output)
crt.Screen.Synchronous = False crt.Dialog.MessageBox("日志采集完成,已保存至 " + filepath) ```
`terminal length 0`用于关闭分页,避免输出中途暂停等待按键。`Synchronous = True`确保Send和WaitForString严格同步,防止命令乱序。
常见报错排查:
如果脚本运行后弹出"Object reference not set"错误,通常是因为当前没有活动的终端会话。请确保脚本运行时已有一个已连接的标签页处于前台。
如果`WaitForString`始终超时返回False,检查两点:一是提示符是否匹配(有些设备用`>`而非`#`);二是设备响应是否确实慢于超时阈值,可适当增大秒数。
如果中文输出乱码,在脚本开头加入`# -*- coding: utf-8 -*-`,并确认Session Options → Terminal → Appearance中字符编码设置为UTF-8。
总结
SecureCRT Python脚本编写的学习曲线并不陡峭——配置好脚本目录,理解`crt.Screen`的Send/WaitForString/ReadString三板斧,就能应对批量巡检、日志采集等日常任务。建议从上面两个实战脚本开始修改练习,逐步扩展到更复杂的场景。如果你还没有安装SecureCRT,可以前往官方下载页面获取最新版本,开始你的自动化运维之路。