☰
SecureCRT 9.5安装配置与Python脚本自动化运维实践
2026/10/29 4:04:06 网站建设 项目流程

简介:这份PDF文档面向需要部署和使用SecureCRT 9.5的IT运维、系统管理员及网络初学者,围绕终端仿真软件的安装、激活与基础使用展开,帮助读者快速完成环境搭建并理解SSH远程管理场景。压缩包内仅含1个PDF文件,大小约9.28MB,正文以图文步骤和功能说明书为主,涵盖多标签会话、SSH加密连接、脚本自动化、会话配置导入导出、终端分屏与主题、SCP/SFTP文件传输及密码、公钥、Smart card认证等要点。已有899人学习,适合作为上手SecureCRT 9.5的参考材料。文档通过图例实操展示安装激活流程,并附带软件功能说明,便于读者对照界面完成配置、排查常见问题;由于内容经OCR扫描整理,个别字词可能存在识别误差,阅读时需结合上下文理解。整体篇幅约27页,兼顾操作指引与功能速查,可辅助读者提升远程服务器管理效率。

1. 装 SecureCRT 9.5 之前,先想清楚它替谁干活

机房里那台老设备只剩一个 Console 口,面板上印着 115200 8N1,办公室却没有一台电脑能顺利把它连上。这份 SecureCRT 9.5 安装流程 PDF 就是在这种场景下翻出来的:27 页截图,从安装包落地、许可填写、会话导入,一路到串口和 SSH 会话跑通,照着点二十分钟能出结果。它服务的是要长期维护交换机、Linux 主机和嵌入式板卡的运维与调试人员,也适合刚接触终端仿真、分不清 Telnet 与 Serial 该选哪个的新手。SecureCRT 9.5 原文把这些步骤全做成了图例,省掉大量试错。

2. 装之前先定协议栈:三条安装路径与一份自检清单

有人把 SecureCRT 当成“能连 SSH 的窗口”,装完只用密码登录,剩下九成功能从未打开。真正常年泡在机房的人看它,看的是同一套界面里能同时挂 SSH2、Telnet、RLogin、Serial 四种会话,会话配置能导出成纯文本,脚本 API 十几年没大改。这三条决定了它值不值得装,也决定了后面配置该怎么起手。

2.1 三个判定条件,决定你要不要装它

第一个条件是协议混杂。手上如果只有清一色 Linux 主机,用系统自带终端加 SSH 配置就够;但只要出现一台只能走串口的老交换板、一台还在跑 Telnet 的工控设备、再加几台 SSH2 的服务器,来回切三四个客户端就是灾难,SecureCRT 把这几类会话塞进同一个窗口的标签页,切换成本接近于零。

第二个条件是留痕需求。很多现场的问题不是连不上,而是“上次那次操作到底敲了什么”。SecureCRT 的会话日志可以按会话名自动命名、自动追加时间戳,出问题回翻日志比回翻聊天记录靠谱得多。这一点在交付验收、故障复盘时特别值钱,也是免费工具普遍做得比较糙的地方。

第三个条件是批量。会话数量一旦超过三十个,手点新建就变成了体力活。SecureCRT 的会话是磁盘上的独立配置文件,能被脚本生成、能被版本管理、能在团队里分发,这条特性决定了后面第三章的做法是否成立。

使用场景建议理由
纯 SSH2、主机少于 5 台系统终端即可配置成本低,无需额外授权
SSH + 串口 + Telnet 混合装 SecureCRT一套界面覆盖多协议
需要会话日志归档、审计装 SecureCRT日志按会话自动落盘
需要批量运维脚本装 SecureCRT内置 Python 脚本接口
临时连一次看个日志不必装学习成本不划算

表格不是让你对号入座,而是提醒一件事:装完只当 SSH 用,等于买了台工作站只开记事本。协议栈的边界想清楚,第二章后面的安装参数才有意义。

2.2 安装包落地后的三步自检

拿到安装包别急着双击。先校验完整性,再确认系统位数和权限,最后确认目标目录不会被安全策略拦。这三步任何一步跳过,后面出现的报错都会指向错误的方向,白白浪费半小时。

# 1. 校验安装包哈希,和来源页给出的 SHA256 对一遍 Get-FileHash .\SecureCRT-9.5-x64.exe -Algorithm SHA256 | Format-List # 2. 看系统架构与当前账户是否为管理员 [Environment]::Is64BitOperatingSystem whoami /groups | Select-String "S-1-5-32-544" # 3. 确认目标盘剩余空间与目录是否可写 Get-PSDrive D | Select-Object Used,Free Test-Path D:\Tools\SecureCRT

第一段算出 SHA256,和下载页给的指纹逐个字符比对,不一致就直接重下,别抱侥幸心理。第二段确认是 64 位系统并检查当前进程是否带管理员组令牌——不带的话安装到Program Files下会静默失败。第三段看目标盘剩余空间,SecureCRT 本体不大,但会话日志默认写在用户目录,长期跑日志的机器要预留几个 G。

注意:日志目录和安装目录最好分盘。安装盘写满会导致程序启动异常,日志盘写满只是写不进日志,两者故障表现完全不同。

2.3 图形安装与静默安装的参数差异

个人机器双击安装就行,一路下一步,中途会问安装类型(典型/自定义)和关联的文件类型。自定义里有一个选项值得改:把“关联 .ini 会话文件”勾上,后面批量生成的会话双击就能打开。装完第一次启动会让你填许可信息,按你手上合法的授权方式填,试用和正式授权的界面不一样,PDF 里两种都截了图。

要装到十几台机器上,图形点击就该换成静默参数。SecureCRT 的安装包底层是 InstallShield 打包,常见的静默写法是外层/S加内层/v透传 MSI 参数:

# 静默安装到自定义目录,不弹任何界面 SecureCRT-9.5-x64.exe /S /v"/qn INSTALLDIR=\"D:\Tools\SecureCRT\"" # 静默卸载(路径按实际安装位置调整) MsiExec.exe /x {ProductCode} /qn # 装完验证:看版本号与安装目录是否落地 "D:\Tools\SecureCRT\SecureCRT.exe" /?

第一行的/S是 InstallShield 的外层静默开关,/v后面的一整串会原样交给 Windows Installer,/qn表示全程无界面,INSTALLDIR是覆盖默认安装路径的公共属性。第二行的/x卸载需要 ProductCode,可以用Get-WmiObject Win32_Product | Where-Object {$_.Name -like "*SecureCRT*"}先查出来。第三行带/?启动会打印命令行用法,这比翻文档快,也是我判断“装没装成功”的第一手依据。

不同打包版本的开关不完全一致,如果/S没反应,先单独跑一次安装包看它是不是自解压结构,再试/s /v"/qn"小写写法。判断标准很简单:进程列表里出现msiexec并且在跑,说明参数被吃进去了;一闪而过什么都没发生,就是参数没被识别。

装完之后有三个自检点。其一,程序能启动且标题栏版本号显示 9.5;其二,在用户漫游目录下已经生成Config\Sessions文件夹,这是会话文件的落脚点;其三,第一次连一台测试主机能弹出主机密钥指纹确认框。三点都过,安装这一段就算收工,剩下的全是配置活。

3. 会话落地:把一份手点配置变成可批量复制的 INI

图形界面点出来的会话,本质上就是磁盘上一个文本文件。理解这一点之后,三十台主机的新建工作就可以从“点一小时”压缩成“跑一个脚本”。这一章解决三件事:会话文件长什么样、怎么批量生成、认证怎么从密码换成公钥。

3.1 会话文件的结构与关键字段

每个会话对应Config\Sessions下的一个.ini文件,文件名就是会话名(带层级时用子目录表示文件夹)。打开任意一个手工建好的会话,会看到类似下面的结构,字段名区分大小写,值里带空格也不需要引号:

S:"Protocol Name"=SSH2 S:"Hostname"=10.20.30.41 D:"[SSH2] Port"=00000016 S:"Username"=ops B:"Use Global Session Settings"=00000000 S:"Log Filename V2"=C:\Logs\%S-%Y%M%D.log B:"Log Session Output"=00000001 S:"Identity Filename V2"=C:\Keys\ops_id_openssh

前两行是协议类型和主机地址,Protocol Name的取值决定这个会话用哪套参数模板,可选 SSH2、Telnet、RLogin、Serial。第三行的端口是十六进制存储,00000016就是十进制 22,改端口时别直接填 22,会连不上。第五、六行是日志开关和日志路径模板,%S会被替换成会话名,%Y%M%D是日期,这套占位符是自动归档的关键。最后一行指向私钥文件,留空则走密码认证。

提示:字段名和取值不要凭记忆手写。先在图形界面里建一个标准会话,导出后照着改,是最省事的做法。

3.2 用脚本批量生成会话文件

有了上面的模板,批量生成就是字符串替换。下面这段脚本从一份 CSV 读主机清单,为每台机器生成一个会话文件,同时把日志路径、端口、用户名按清单覆盖:

import csv, os, pathlib SESSIONS_DIR = pathlib.Path(os.path.expandvars(r"%APPDATA%\Config\Sessions")) TEMPLATE = """S:"Protocol Name"={proto} S:"Hostname"={host} D:"[SSH2] Port"={port_hex} S:"Username"={user} S:"Log Filename V2"=C:\\Logs\\{name}-%Y%M%D.log B:"Log Session Output"=00000001 S:"Identity Filename V2"=C:\\Keys\\ops_id_openssh """ with open("hosts.csv", newline="", encoding="utf-8") as f: for row in csv.DictReader(f): name = row["name"].strip() content = TEMPLATE.format( proto=row.get("proto", "SSH2"), host=row["host"].strip(), port_hex=format(int(row.get("port", 22)), "08X"), user=row.get("user", "ops"), name=name, ) target = SESSIONS_DIR / f"{name}.ini" target.write_text(content, encoding="utf-8", newline="\r\n") print("written:", target)

SESSIONS_DIR取的是当前用户的漫游配置目录,脚本必须在和 SecureCRT 同一个用户下运行,否则写进去的文件程序看不到。format(int(port), "08X")是把十进制端口转成八位大写十六进制,位数不够补零,这是这个格式的硬要求。write_text里的newline="\r\n"不能省,纯 LF 换行在某些版本上会被解析成一行,会话读出来是空的。

跑完脚本重启一次程序,会话管理器里就会多出一批条目。第一次批量导入建议只放两台机器试水,确认字段解析没问题再全量铺开——这是血泪经验,一次性写错八十个文件再回头排查,成本比试水高太多。

3.3 从密码认证切到公钥认证

密码认证在十几台机器上还能忍,超过二十台就必须换公钥,否则每次改密码都是一场灾难。SecureCRT 支持密码、公钥、Smart card 三类认证,日常用得最多的是公钥。

先在本机生成密钥对,注意 SecureCRT 读的是 OpenSSH 格式私钥,用 PuTTY 生成的.ppk需要先在工具菜单里转换一次:

# 生成 4096 位 RSA 密钥,注释写清用途 ssh-keygen -t rsa -b 4096 -C "ops@bastion" -f ~/.ssh/ops_id_openssh # 把公钥推到目标主机的授权列表 ssh-copy-id -i ~/.ssh/ops_id_openssh.pub ops@10.20.30.41 # 校验服务端权限,这两层权限错了公钥会静默失效 ssh ops@10.20.30.41 "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

第一步的-b 4096指密钥长度,-C后面的注释会写进公钥末尾,方便在服务端authorized_keys里辨认是谁的钥匙。第二步的ssh-copy-id会自动创建目录并追加公钥,比手工复制粘贴可靠。第三步单独校验权限是必须的:.ssh目录必须是 700,authorized_keys必须是 600,权限放宽一点点,服务端就会直接拒绝公钥登录,而且日志里只有一句“Authentication failed”,看不出原因。

回到 SecureCRT,在会话属性的认证配置里把公钥文件指向ops_id_openssh,密码一栏留空,连接时就不会再弹密码框。会话文件里对应的字段就是 3.1 里那行Identity Filename V2,手工批量改也行,脚本统一写也行。

3.4 串口与文件传输的参数落点

串口会话的参数和 SSH 完全不同,建会话时协议选 Serial,然后填五个值:端口号(如 COM3)、波特率、数据位 8、停止位 1、校验 None、流控 None。115200 8N1 是现在最常见的组合,老设备上 9600 也很常见,接之前先看设备面板或手册,别猜。流控这一项如果设备手册没提,一律选 None,选错硬件流控的表现是能连上但敲字符没回显,很容易误判成线缆问题。

文件传输不用另开工具,会话窗口里直接开 SFTP 标签页即可,左侧本地、右侧远端,拖拽就行。传大文件时留意日志目录所在盘的剩余空间,传输过程本身不写日志,但同一会话如果开了输出日志,全量打印会把盘吃满。

4. 脚本接管重复劳动:Python 驱动 SecureCRT 的三个接口

装完、配完,剩下的重复动作是“登录、敲命令、存输出”,一天重复十几次。SecureCRT 内置脚本引擎,支持 Python 和 VBScript,通过crt对象操作会话。这一章讲清楚脚本挂在哪里、怎么写、失败了看什么。

4.1 脚本的三种挂载位置

第一种是手动执行,脚本菜单里选运行,适合临时调试。第二种是登录脚本,在会话属性里指定,连上主机后自动执行,适合统一改提示符、自动enable、自动打时间戳。第三种是命令行启动时用/SCRIPT参数带入,适合批处理调度。

# 启动即连主机并自动执行脚本,适合放进计划任务 "D:\Tools\SecureCRT\SecureCRT.exe" /SSH2 ops@10.20.30.41 /PASSWORD "***" /SCRIPT "D:\Scripts\collect.py"

/SSH2指定协议,后面跟用户名@主机;/PASSWORD明文写在命令行有泄露风险,生产环境建议改用公钥,把这一段去掉;/SCRIPT后面是脚本绝对路径,路径里不要有中文和空格,某些版本对空格处理不干净。这条命令的价值在于可以被任务计划程序调用,做成每天凌晨的巡检采集。

4.2 一个可抄的批量采集脚本

下面这段脚本连上当前活动会话,按顺序执行三条命令,把输出写进本地文件。核心接口只有三个:Send发数据、WaitForString等回显、Session.Connect建连接。

# -*- coding: utf-8 -*- import os, time LOG_DIR = r"D:\Logs\collect" def main(): tab = crt.GetScriptTab() screen = tab.Screen screen.Synchronous = True # 同步模式,等回显再继续,必开 name = tab.Session.Path or "session" out_path = os.path.join(LOG_DIR, time.strftime("%Y%m%d_%H%M%S") + ".txt") os.makedirs(LOG_DIR, exist_ok=True) cmds = ["show version", "show interfaces status", "show running-config | include hostname"] buf = [] for cmd in cmds: screen.Send(cmd + "\r") if not screen.WaitForString("#", 15): # 15 秒内没等到提示符就算超时 buf.append(f"### TIMEOUT: {cmd}\n") continue buf.append(f"### {cmd}\n" + screen.Get(0, screen.CurrentRow) + "\n") with open(out_path, "w", encoding="utf-8") as f: f.write("".join(buf)) crt.Dialog.MessageBox("已写入 " + out_path) main()

screen.Synchronous = True必须开,它让Send变成阻塞式,等数据真正发出去才返回,不开的话连续发命令会出现命令粘包。WaitForString("#", 15)的第二个参数是超时秒数,返回布尔值,超时返回 False 而不是抛异常,所以要显式判断,否则脚本会一路往下跑,最后写出一堆半截数据。Get(0, screen.CurrentRow)取的是从第 0 行到当前行的屏幕缓冲内容,行号越界会抛错,所以要在等待成功之后再取。

提示符#是硬编码的,换到别的厂商设备上可能是>或$,用之前先看目标设备的提示符规则,或者改成用更长的特征串匹配。这段脚本只负责采集,不做任何配置下发,是刻意这么设计的——读操作出错的代价远小于写操作。

4.3 超时、编码与幂等

超时值不要图省事填 60。等待时间过长,脚本卡死时你根本分不清是设备没响应还是脚本在傻等。常见做法是按命令复杂度分档:状态查询 10 到 15 秒,大配置导出 60 秒,重启类命令单独走人工确认,不进脚本。

编码问题也常被忽略。Windows 上的 Python 脚本如果带中文注释,文件必须存成 UTF-8,且首行加编码声明;写文件时显式指定encoding="utf-8",否则在中文系统上默认按 GBK 落盘,后续解析会乱码。

幂等性是指同一份脚本重复跑两次不应该产生副作用。采集类脚本天然幂等,但如果你在脚本里加了“把配置写回设备”,就必须加前置判断:先读当前值,和目标值比对,不同才写。这一步多花的二十行代码,能避免半夜被叫起来回滚配置。

5. 避坑与排查:五个把安装流程卡住的现场记录

这一章全是踩过的坑,按“现象是什么、为什么会这样、怎么解决”三段写。遇到同类表现时先对照现象,别从头重装一遍。

5.1 安装与启动阶段

现象:双击安装包后进度条走完,程序目录里只有几个空文件夹,启动提示缺少组件。原因多半是安装过程被安全策略中断,或者目标目录权限不足,安装器静默回滚但没有弹窗提示。解决:换到有写权限的目录重装,安装前用管理员权限运行,装完看安装日志里有没有Return value 3这类回滚标记。

现象:程序能启动,但标题栏版本号和安装包不符,功能菜单少了几项。原因是旧版本残留的注册项和配置文件被新版本继承,混装在同一目录。解决:先完整卸载旧版本,手工清掉Config目录之外的用户配置,再装新版本,装完确认版本号。

注意:卸载前先把Config\Sessions整个目录复制一份出来,卸载程序不保证保留会话文件。

5.2 会话与认证阶段

现象:会话文件写好了,程序里却看不到。原因通常是三处之一:写了 BOM 头、换行符是 LF、文件名带了非法字符。解决:用十六进制工具看一眼文件头是不是EF BB BF,有就重写;确认换行是 CRLF;文件名去掉空格和中文。

现象:公钥配置好了,连接仍提示认证失败,服务端日志只有一句失败。原因是密钥格式不对或者权限过宽。解决:确认私钥是 OpenSSH 格式而不是.ppk,需要转换就用工具导一次;同时检查服务端~/.ssh为 700、authorized_keys为 600,属主必须是登录用户本人。

现象:串口会话连上了,敲键盘没有任何回显。原因是流控或波特率不匹配。解决:流控先设 None,波特率按设备手册逐个试 115200、57600、9600 三档,还不行就查线序(TX/RX 是否交叉)。

5.3 脚本执行阶段

现象:脚本跑完输出文件是空的,或者只有第一行命令的结果。原因是同步模式没开,或者等待特征串根本没出现。解决:先开screen.Synchronous = True,再在脚本里加一行临时打印,把WaitForString的返回值打出来,返回 False 就说明特征串不对,改提示符特征再试。

6. 把会话目录当配置资产:一次校验与两处同步

会话文件是纯文本这件事,价值不止于批量生成。我把Config\Sessions整个目录纳入了版本管理,团队里谁新增了设备、谁改了端口,一次提交就能看见差异,比口头交接可靠得多。做法很简单:目录初始化成仓库,提交前跑一遍校验,把不合规的会话筛出来。

校验项判定标准不通过的典型后果
文件编码无 BOM 的 UTF-8会话读不出来
换行符CRLF整段被解析成一行
端口字段八位十六进制连到错误端口
日志开关已开启且路径可达出问题无据可查
私钥路径存在且为 OpenSSH 格式认证失败

校验脚本不用写得多复杂,几十行足够:

import pathlib, re ROOT = pathlib.Path(r"%APPDATA%\Config\Sessions") issues = [] for f in ROOT.rglob("*.ini"): raw = f.read_bytes() if raw.startswith(b"\xef\xbb\xbf"): issues.append((f.name, "带 BOM")) if b"\r\n" not in raw: issues.append((f.name, "换行非 CRLF")) text = raw.decode("utf-8", "ignore") m = re.search(r'D:"\[SSH2\] Port"=(\w+)', text) if m and len(m.group(1)) != 8: issues.append((f.name, "端口位数不对")) if 'B:"Log Session Output"=00000001' not in text: issues.append((f.name, "未开日志")) print(f"扫描 {len(issues)} 处问题") for name, why in issues: print(f" {name}: {why}")

rglob("*.ini")会把子目录里的会话一起扫进来,对应程序里的会话文件夹层级。decode("utf-8", "ignore")用忽略策略是为了让带 BOM 的文件也能继续往下检查,不至于直接抛异常中断。端口位数那条规则抓的是手写端口时最容易犯的错——直接填22而不是八位十六进制。

同步分两处:一是团队内同步,把仓库推到内部代码托管,新同事克隆后覆盖到自己的Config\Sessions,重启程序即可;二是跨机器同步,把目录放进同步盘,但只同步会话文件,不同步日志和缓存,日志目录单独指到本地盘。这两处都验证过才叫“配置资产”,否则只是换个地方存垃圾。

最后留一个我自己的习惯:每次装完或改完会话,先连一台最不重要的测试机,跑三条命令——一条状态查询、一条文件传输、一条脚本采集,全过才算配置生效。这套动作强制走一遍会多花五分钟,但它把所有“看起来装好了”的幻觉提前戳破。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询