
简介SecureCRT 9.1.0 Build 2579Windows X64官方原版安装包面向需要远程登录 Linux/UNIX 服务器的运维、开发与网络工程人员也适合课程实验和日常排障场景。它基于 SSH1、SSH2、Telnet、Serial 等协议提供终端仿真与多会话管理可替代 PuTTY、Xshell 等常见工具满足稳定连接、字符终端操作和批量主机维护需求。压缩包共 3 个文件包含 exe 安装程序、zip 压缩件及 html 安装说明整体约 29.94MB安装前可先阅读说明了解解压密码与注意事项。资源附官方原版安装文件便于获取干净安装源、核对版本并完成部署也能作为 SecureCRT 使用与配置的参考资料。已有 7526 人学习下载适合希望使用经典 SSH 终端工具进行服务器连接、实验练习和日常运维的读者。1. 手里只有一台 Windows 机器却要同时连接十几台 Linux 服务器是一件麻烦事早上刚上班同组的某开发者还得在 Windows 上同时盯着三台 Linux一台跑构建、一台看日志、一台改配置。PuTTY 开了一排小窗口切换时全靠 AltTab换成 MobaXterm界面又重得让人难受再换 Xshell授权和版本限制又会带来额外麻烦。于是 SecureCRT 9.1.0 Build 2579 的 Windows X64 安装包很自然地进入了考虑范围可以创建标签页、能保存会话、带 SFTP还能用脚本完成重复操作Windows 上常做的 Linux SSH 远程连接基本一次配置到位。这篇不讨论它是否“最好用”——那种争论没有结论——只讨论这份安装包拿到手之后怎样安装、怎样配置、哪些参数必须修改、哪些地方容易出问题。如果你手上有正版授权想把它作为长期主力客户端下面这些内容可以直接参照使用。2. 解读这个客户端的功能结构协议栈、会话数据库与脚本引擎在动手安装之前值得先弄清 SecureCRT 的三个核心组成部分否则后面遇到“会话配置为什么无法迁移”“脚本为什么不生效”这类问题就很难快速定位。这三部分是终端仿真与协议栈负责连接、会话数据库负责保存连接配置、脚本引擎负责自动化操作。2.1 SSH2 之外还有哪些连接方式各自适用什么场景很多人以为 SecureCRT 只是一个 SSH 客户端实际上它内置了多种连接协议。你新建会话时协议下拉菜单中的所有选项都能真正使用只是场景不同协议默认端口典型场景使用注意SSH222现代 Linux 主机日常登录是主要方式优先选择支持密钥认证与端口转发SSH122极老的网络设备或嵌入式系统协议本身已过时能不使用就不使用Telnet23内网实验环境的交换机、串口服务器明文传输不要在不可信网络中使用SerialCOM 口连接交换机 Console 口、板卡调试串口需先确认波特率常见为 9600/115200RLogin513少数遗留 Unix 系统基本只在需要兼容老系统时才会使用Local Shell无在本机直接启动 cmd/powershell/bash相当于把终端标签页用于本地环境我通常把 SSH2 作为唯一正式通道Telnet 和 Serial 只在机房现场调试时使用。按照这个划分后面会话管理器中的文件夹也按“生产、测试、网络设备、串口”分好标签页才不会显得杂乱。选择 SSH2 时还有一个细节会话选项里的 SSH2 版本协商默认是 “Auto”对于新装的主流发行版不需要改动只有在遇到老版本的设备时才需要手动指定加密算法和 MAC因为老设备的算法列表往往不包含新版客户端默认列出的强算法从而直接导致握手失败。这类问题表现为“连接超时”或“握手失败”并非账号密码错误。2.2 会话保存在哪里把 Config 目录当作配置文件来看待SecureCRT 不把会话保存在注册表里这是它最便于迁移的优点之一。所有配置都在用户目录下的一个文件夹里%APPDATA%\VanDyke\Config\ ├── Global.ini # 全局选项界面、快捷键、默认编码 ├── Sessions\ # 每个会话一个 .ini 文件 │ ├── prod-web-01.ini │ └── lab-db-02.ini └── Keywords\ # 关键字高亮规则用文本编辑器打开任意一个.ini能看到S:Hostname10.0.0.11、S:Usernamedeploy、D:[SSH2] Port00000016这样的键值对。其中以D:开头的是十进制数值00000016就是 22这是十六进制写法的十进制数。理解这一点后很多“配置迁移后无法连接”的问题就能自行解决只要把会话文件从一台机器复制到另一台机器的同名目录重启客户端即可但如果目标机器的用户名不同路径中的%APPDATA%会发生变化就必须放置到对应用户的目录下否则客户端不会读取该配置。我的习惯是每隔一段时间把整个Config目录打包一次这比在软件里逐个会话手动导出可靠得多。提示修改.ini之前先关闭 SecureCRT。它在退出时会把内存中的配置回写手动修改的内容有概率被覆盖。2.3 脚本引擎内置 Python 能替代多少重复操作SecureCRT 9.x 内置了脚本运行环境支持 Python、VBScript、JScript 三套语言。其中 Python 是我唯一会使用的因为它能直接调用crt对象访问当前会话和屏幕缓冲区。脚本文件放在Config\Scripts\目录下通过菜单 Script → Run 或绑定快捷键执行。先看一个最小可用的示例登录后自动收集主机名、内核版本和磁盘占用。# -*- coding: utf-8 -*- # 文件名: collect_info.py放在 Config\Scripts\ 下 # 作用: 在当前已连接的 SSH 会话里依次执行命令并抓取回显 def main(): if not crt.Session.Connected: # 会话没连上就直接退出 crt.Dialog.MessageBox(当前会话未连接) return cmds [ hostname, uname -r, df -h / | tail -n 1, ] tab crt.GetScriptTab() # 拿到当前标签页 tab.Screen.Synchronous True # 关闭异步保证抓到完整回显 for cmd in cmds: tab.Screen.Send(cmd \r) # \r 是回车Linux 侧识别为执行 tab.Screen.WaitForString($) # 等待提示符按自己环境改 tab.Screen.WaitForString(\n, 1) # 再等一拍把尾部输出收干净 tab.Screen.Synchronous False main()这段代码有三个地方值得说明。第一Synchronous True是关键如果不把它设为同步Send后会立刻返回后续的WaitForString可能读取到上一条命令的残留输出导致抓取结果错位这就是典型的“脚本运行成功但结果不对”。第二WaitForString($)依赖提示符root 用户通常是#某些发行版还会带有颜色转义字符所以稳健的写法是在目标机PS1里固定一个不含颜色的字符作为锚点比如export PS1[\u\h \W]\$ 之后再匹配。第三crt.GetScriptTab()只能操作脚本启动时所在的那个标签页如果需要批量连接多台机器就要配合crt.Session.ConnectInTab()逐台创建。脚本的可维护性比功能多少重要得多。我一般不把逻辑复杂的操作放进脚本只让它完成“登录、执行几条固定命令、把结果写入文件”这类例行任务。3. 装完就能连从安装包到第一条 SSH 会话的完整步骤安装本身不难难的是第一次就把参数配置正确避免开一周后再回来重新整理。这一章按照“安装 → 新建会话 → 密钥免密 → 组织会话”的顺序逐步操作每一步都说明该填写什么、为什么要这样填。3.1 安装前的三件事验证签名、确定路径、处理旧配置Windows X64 安装包拿到手先不要急着双击。第一件事是查看文件属性中的数字签名确认签名者是官方实体第二件事是核对哈希值尤其当安装包来自第三方打包渠道时比如随包附带组件、说明文件的那种哈希校验是唯一能确认文件未被二次改动的办法。校验命令在 PowerShell 里一行就够# 计算安装包 SHA256和发布方给出的值逐位比对 Get-FileHash -Algorithm SHA256 .\SecureCRT-x64-9.1.0-2579.exe | Format-ListGet-FileHash默认输出大写哈希串比对时注意大小写不敏感但长度必须一致64 位字符少一位都说明文件已经被修改过。第三件事是安装路径默认会安装到C:\Program Files\VanDyke Software\Clients\如果机器上已经安装过旧版本安装程序会提示覆盖升级此时不要顺手删除旧配置目录。旧版本的会话、全局设置、脚本都在Config里卸载程序默认不动它但手动清理安装目录时容易误删。我的做法是升级前先复制一份Config并重命名比如Config_bak_2024出问题十分钟内就能回滚。安装过程中有几个选项值得留意是否安装 SecureFX文件传输的独立客户端、是否添加右键菜单、是否设置成 Telnet/SSH 的默认打开程序。如果只需要终端功能SecureFX 可以不安装SecureCRT 自带的 SFTP 标签页已经够用右键菜单建议添加以后双击.ini会话文件能直接打开调试配置时会方便很多。注意安装包附带的任何额外组件、激活工具或“优化补丁”来源不明的都不要运行授权和激活请通过官方渠道处理。运行来源不明程序的风险远大于节省下来的那点成本。3.2 新建 SSH2 会话逐项解释每个参数的作用安装完成后第一次启动会弹出快速连接框很多人直接在上面输入 IP 就连接了结果这台主机的密码需要反复输入。正确做法是走完整的会话属性配置流程菜单 File → New Session或者会话管理器右键 → New Session协议选择 SSH2。配置项填什么为什么Hostname10.0.0.11 或内网域名建议填域名换 IP 时不用改会话Port22改过端口的按实际填填错表现为直接超时Usernamedeploy要和目标机~/.ssh/authorized_keys里的公钥注释对得上FirewallNone只有经过跳板机时才需要配置Session nameprod-web-01命名规范见下会话名不是随便取的。我见过太多人的会话列表里存在一堆 “10.0.0.11”“新会话”“test”三个月后自己都分不清哪台是哪台。建议按环境-角色-序号命名比如prod-web-01、lab-db-02这样会话管理器的排序就是按环境分组的新同事接手也能看懂。填完后不要急着点 Connect先点 Session Options 把编码、日志、Anti-idle 这些一次性配置好后面就不用反复修改了。SSH2 子选项里必须检查的两处Terminal → Appearance 的 Character encoding 选 UTF-8这是中文乱码最直接的解决办法Terminal → Anti-idle 勾选 “Send protocol NO-OP”、间隔 60 秒这是解决 NAT 环境下频繁掉线的关键设置。这两项配置好后一条会话的基本可用状态就确定了。3.3 密钥认证把 OpenSSH 私钥正确加载给 SecureCRT密码登录能使用但长期操作一定要启用密钥认证尤其是需要跑脚本或执行定时任务的时候。流程分两边Linux 侧生成密钥对Windows 侧把私钥引入 SecureCRT。先在 Linux 上操作# 在跳板机或本地 WSL 上生成一对密钥-t 指定算法-C 是注释便于识别 ssh-keygen -t rsa -b 4096 -C deploywin-client -f ~/.ssh/id_rsa_securecrt # 把公钥追加到目标机的授权列表注意权限必须是 600/700 ssh-copy-id -i ~/.ssh/id_rsa_securecrt.pub deploy10.0.0.11 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys-b 4096是密钥长度RSA 4096 在兼容性上最保险如果目标发行版较新、你也愿意使用更短的密钥可以换成-t ed25519但要注意老版本客户端和部分老系统对 ed25519 的支持不完整遇到“Private key format not supported”这类报错时退回 RSA 是最省事的做法。-f指定输出路径避免覆盖已有的id_rsa这个习惯在已经有其他用途密钥的机器上尤其重要。ssh-copy-id会自动处理远端.ssh目录权限比手动cat authorized_keys稳妥。然后回到 Windows把id_rsa_securecrt这个私钥文件复制到本机一个固定目录比如D:\keys\在会话属性里选 SSH2 → Authentication → PublicKey → Properties选中该文件。如果私钥设置了 passphrase连接时会弹窗要求输入想省掉这一步可以在同界面把密码保存到会话中但保存位置是本地配置机器共用时需要权衡。这里有一个高频问题从 Linux 复制过来的私钥文件在 Windows 下如果被记事本打开并另存过行尾会变成 CRLFSecureCRT 加载时会报格式错误——用自己的话讲就是“密钥是对的但客户端就是无法加载”。解决方法是全程用二进制方式传输或者用dos2unix转换一下再放回去。3.4 组织会话用文件夹、标签和快速连接减少查找时间会话一多能否快速找到目标就成了效率问题。SecureCRT 的会话管理器支持文件夹分组右键 → New Folder按生产/测试/网络设备/串口建四级把会话拖进去即可。同时打开多个会话时Tools → Global Options → Terminal → Tabs 里可以设置标签位置顶部/底部、是否显示完整会话名、CtrlTab 循环切换。个人偏好是把标签放在底部并显示完整名称因为在上面一行能直接看出当前在哪台机器避免在错误的机器上执行命令——这件事如果出错代价会很大。快速连接Quick Connect快捷键 AltQ适合一次性临时登录输入ssh2://deploy10.0.0.99:22这种统一格式回车即可用完不保存。我通常把它当作一种试验入口新机器先快速连接进去看看环境确认需要长期维护了再从快速连接栏转成正式会话避免会话列表被一次性主机堆满。会话文件夹还有一个额外好处右键文件夹 → “Connect in Tabs”可以把整个文件夹的会话一次性按顺序打开巡检时很省事。4. 将日常运维效率提升到更高水平日志、SFTP、端口转发与批量脚本连接建立只是开始真正决定这个客户端是否值得长期使用的是周边功能。日志决定了出问题后能否查清事实经过SFTP 决定了修改配置时是否还需要再打开一个工具端口转发决定了你能不能用一个客户端完成全部操作脚本则决定了重复性工作可以自动化到什么程度。4.1 会话日志文件名变量与写入策略SecureCRT 的日志功能位于 Session Options → Terminal → Log File。勾选 “Start log upon connect” 后自动开始记录勾选 “Append to file” 则追加而不是覆盖。文件名支持变量替换常用的几个是变量含义示例输出%H主机名prod-web-01%S会话名prod-web-01%Y%M%D年 月 日2024 05 17%h%m%s时 分 秒09 30 12组合成D:\logs\%H\%Y-%M-%D.log就会按主机分目录、按天切分文件。这个设置我有一个惨痛教训早期图省事所有会话都写入同一个all.log结果某次生产环境误操作之后去翻日志发现三台机器的输出交错在一起时间戳还对不上根本无法看清。从那以后我把日志路径统一改成带%H的格式并且在 Global Options 里把日志文件按会话隔离宁可磁盘多占一点空间。日志目录记得加入备份策略尤其是排查线上问题时这些文本记录往往比监控图表更接近事实。4.2 SFTP 面板修改配置不再来回切换工具会话连上之后菜单 File → Connect SFTP Session默认 AltP会在当前窗口打开一个 SFTP 标签页左侧本地、右侧远端。它不是独立进程而是复用当前 SSH 连接所以不需要额外开启端口也不会多一次认证。传输队列支持断点续传右键文件 → Upload/Download 即可。有几个使用细节值得记下来传输时注意右侧路径的/与 Windows 的\不要混用上传 shell 脚本后先在 SSH 标签页chmod x否则执行时会报权限不足大文件传输前把 Session Options → Terminal → Anti-idle 的间隔调短到 30 秒避免长传输被中间设备静默断开。用 SFTP 面板改配置文件时我一般遵循“先下载到本地、本地改、再上传”的顺序而不是直接双击远端文件编辑。直接编辑在断线时容易写出半截文件而这个文件如果是sshd_config这类关键配置服务重启失败就会直接造成连接中断。4.3 本地端口转发把内网数据库端口映射到本机内网有台 MySQL 只监听 127.0.0.1本地开发想连它又不想在服务器上开放外来访问用 SSH 本地端口转发最直接。配置位置在 Session Options → Connection → Port Forwarding点 Add 添加一条 Local 规则字段填写示例说明Namemysql-3306规则名随便起但有意义Local port13306本机监听端口不要和已占用端口冲突Remote host127.0.0.1从服务器视角看的目标地址Remote port3306目标服务端口Destination按 Remote 方式只转发到远端可访问的地址填完后会话一建立规则立刻生效本地127.0.0.1:13306就连到了远端的 3306。原理一句话客户端在本地监听端口把收到的字节流通过已建立的 SSH 通道送到远端由远端代为建立连接。因此它要求 SSH 会话保持连接会话断开转发就中断这也是为什么前面强调 Anti-idle。反向的 Remote 转发配置思路对称把服务器上的某个端口映射回你本机适合让远端机器主动访问本地调试服务。两条规则都建议命名清晰规则多了之后全靠 Name 区分。4.4 Python 脚本批量执行一次巡检十几台机器单台操作靠手快批量操作靠脚本。下面的脚本演示循环连接一组会话、执行命令、把结果写到一个本地文件里# -*- coding: utf-8 -*- # 文件名: batch_check.py作用: 遍历会话文件夹逐个连接执行命令 import os HOSTS [prod-web-01, prod-web-02, lab-db-02] OUT os.path.expanduser(~/check_result.txt) CMD uptime; free -m | sed -n 2p def main(): result [] for host in HOSTS: tab crt.Session.ConnectInTab(/SSH2 host, False) if not tab.Session.Connected: result.append(%s\tCONNECT_FAIL % host) # 连接失败也记录别静默跳过 continue tab.Screen.Synchronous True tab.Screen.Send(CMD \r) tab.Screen.WaitForString($, 10) # 第二个参数是超时秒数 result.append(%s\t%s % (host, tab.Screen.Get(1, 1, 200, 80))) tab.Session.Disconnect() f open(OUT, w) f.write(\n.join(result)) f.close() main()ConnectInTab的第一个参数是连接字符串支持带协议前缀的格式第二参数False表示不立即切换焦点这样脚本运行时不会反复抢占窗口。WaitForString的超时参数一定要给不给的话某台机器卡在登录提示符就会让整个脚本长时间无响应。Screen.Get是按行列坐标抓取屏幕内容参数顺序是(top, left, bottom, right)写反了抓到的是空白这是初次使用最常出现的错误。收集结果时把失败的主机也写入文件比只记录成功的机器实用得多——巡检的意义恰恰在于找出哪台有问题而不是产出一份看起来很整齐的成功列表。5. 常见问题排查五个失败场景的现象、原因与解决办法下面这五条都是实际运行中会遇到的排查顺序按现象 → 原因 → 解决写遇到时按顺序核对即可。5.1 连接几分钟后自动断开重连又正常现象会话空闲两三分钟后显示 “Connection closed”必须手动重连重连后一切正常但过一会儿又断。原因中间有 NAT 或防火墙设备长时间无数据包就清理了会话表项或者服务器端sshd_config里ClientAliveInterval配置过短。解决会话属性 Terminal → Anti-idle 勾选 “Send protocol NO-OP”间隔设 60 秒让连接始终有流量。如果还是断登录服务器看/etc/ssh/sshd_config里的ClientAliveInterval和ClientAliveCountMax前者控制服务器多久发一次探测后者控制失败几次断开一般设 60 和 3 就够了改完systemctl reload sshd。5.2 中文全部显示成方块或乱码现象ls出来的中文文件名是问号cat中文文件全是乱码但英文正常。原因客户端侧 Character encoding 和服务端locale不一致一边 UTF-8 一边 GBK或者字体本身不含中文字形。解决先确认服务端echo $LANG输出是不是en_US.UTF-8之类再回客户端把 Session Options → Terminal → Appearance → Character encoding 改成 UTF-8。如果字符能显示但字形是方块去字体设置里换成带中文的等宽字体比如 Consolas 配中文回退或直接用系统自带的中文字体。两个地方都要改只改一处经常出现“不报错了但还是难看”的情况。5.3 私钥加载失败提示格式不支持现象在 PublicKey → Properties 里选中私钥文件后弹出 “Unable to load private key” 或连接直接失败密码登录却正常。原因三种可能——私钥被文本编辑器改过行尾、私钥本身是加密格式而客户端没弹出密码输入、或者算法类型不被当前版本完整支持。解决先按 3.3 的说明重新从 Linux 传一次二进制文件再看私钥首行-----BEGIN OPENSSH PRIVATE KEY-----是新格式-----BEGIN RSA PRIVATE KEY-----是 PEM 老格式两者都受支持但如果首行变成了BEGIN ENCRYPTED PRIVATE KEY说明设置了 passphrase 且客户端没能弹出输入框重新引入并留意弹窗。仍不行就用ssh-keygen -t rsa -b 4096重新生成一对RSA 的兼容面最广。5.4 复制粘贴失灵CtrlC 变成了中断信号现象选中文本后按 CtrlC不但没复制还在远端发出了^C把正在跑的命令打断了。原因终端约定里 CtrlC 是发送中断字符 0x03客户端的“复制”快捷键和它冲突取决于 Mapped Keys 的配置。解决用鼠标选中即可复制开启 “Copy on select” 后选中即入剪贴板粘贴用 ShiftInsert 或右键菜单这两个是终端里的通用做法。想改成 CtrlV 粘贴在 Session Options → Terminal → Emulation → Mapped Keys 里新增一条映射把 CtrlV 指向 Paste 函数CtrlC 保持发送中断不动——把中断键改掉是自找麻烦很多交互式程序依赖它。5.5 迁移配置后会话全部打不开现象把Config目录从旧机器复制到新机器打开客户端会话列表是空的或者点开会话提示路径不存在。原因把目录放错了层级或者新旧版本的重大升级导致.ini结构不兼容。解决先确认目标路径是%APPDATA%\VanDyke\Config而不是安装目录下的Config这两个地方长得很像但只有前者会被读取。确认无误还是空的话看会话文件是不是被放进了Config\Sessions\的下一级子目录之外——SecureCRT 支持子文件夹但层级要和原来一致。跨大版本迁移时先用旧版本导出、新版本导入的方式过渡一次比直接复制目录稳。6. 把会话配置转化为可复用资产备份、校验与一次回归配置调试顺了以后最容易被忽略的一件事就是备份验证。我见过不止一次“会话文件复制过去用的时候才发现密钥路径是旧机器的绝对路径”的情况会话能打开但一连接就报错原因全是本地路径失效。所以备份不能只做复制还要做一次可用性回归。备份本身很简单把整个Config目录压缩带走即可# 在 Windows 的 Git Bash 或 WSL 里执行注意路径中的用户名要换成当前用户 cd $APPDATA/VanDyke tar -czf securecrt-config-$(date %Y%m%d).tar.gz Config/用tar而不是直接复制文件夹是因为.ini和脚本文件数量多逐个复制容易漏掉隐藏文件压缩包带日期后缀天然形成版本序列。恢复时的顺序是先完全退出 SecureCRT再把旧Config改名为Config_old作为保险然后解压新包最后启动客户端检查会话列表。真正需要回归验证的是三件事。第一逐个连接关键会话确认不是“列表在但连不上”尤其要验证使用密钥认证的那几台。第二打开一个会话的 Session Options检查 PublicKey 那一栏的私钥路径是否还指向本机存在的文件——这是路径失效最集中的地方跨机器迁移几乎必然出现解决办法是把私钥统一放到%USERPROFILE%\.ssh\下会话里用相对引用。第三跑一遍批处理脚本确认Scripts目录和脚本里写死的输出路径都还有效。我用一个小表格记录每次迁移的检查项跑完打勾检查项通过标准常见失败原因会话列表完整文件夹层级与旧机一致放错到安装目录密钥登录可用免密登录成功私钥路径失效中文显示正常文件名不乱码编码未随配置迁移日志正常写入新建日志文件按日生成日志目录无写权限脚本可执行输出文件有内容脚本内绝对路径失效最后说一个习惯。我现在每次迁移或升级完客户端都会强制按上面五项逐一验证不靠“打开看看好像没问题”来判断。有一次帮同事恢复环境会话列表看着齐全结果三台生产机的密钥路径全指向一个已经不存在的盘符当天下午排查问题时就卡在登录上比重新配置一遍还费时间。从那以后我给自己定了规矩配置可以复制但复制完必须实际连接一次才算完成。这份 SecureCRT 9.1.0 Build 2579 的 Windows X64 包配合上面这套会话组织、密钥、日志和脚本的配置方式基本能把 Windows 上日常的 Linux SSH 远程连接需求覆盖完整授权走正规渠道安装包核对过哈希再安装剩下的就是照着参数一项项配置到位。希望帮到你。本文还有配套的精品资源点击获取