简介:SecureCRT作为一款经典的远程连接客户端软件,主要面向需要登录Linux服务器、网络交换机或路由器执行命令行操作的中高级运维与开发人员,支持SSH、Telnet等常见协议,兼容多标签工作方式。压缩包提供中文汉化绿色版,免安装即可启动,符合即时使用、绿色便携的习惯,无需修改系统注册表,解决了原版界面语言障碍与授权注册繁琐的问题。包体约30.36MB,区分32位与64位版本,分别内置终端会话和SFTP文件传输的便携启动程序,所有会话、密钥、书签等配置统一存放于Data目录,便于整体打包备份、跨设备迁移、多电脑间同步以及日常整理,也可直接拷入U盘随身携带。目前已有1786人学习下载。实际投入日常使用时,读者可获得开箱即用的中文界面、稳定的SSH2/SFTP连接能力,以及会话标签、密钥登录、端口转发等实用特性,适合日常服务器维护、网络排障与协议学习等多种场景,重装系统后也能快速恢复原有连接配置,对提升远程运维效率有明显帮助。
1. 一台电脑连几十台设备:SecureCRT 解决的不是连接,是会话管理这盘账
搞运维、做嵌入式、带实验项目的同学,应该都体会过这个场景:手里七八台服务器,A 机看日志、B 机上服务、C 机改配置,终端窗口开了一排,每个窗口都得重新敲 ssh 命令、输用户名、找密码。搜 crt ssh、终端工具、会话管理的人,基本就是这个诉求——不是连不上,是管理不过来。SecureCRT 这类终端客户端,核心价值就是把散落的 SSH、Telnet、串口会话收拢成一套可保存、可分类、可脚本化的入口,双击就能进设备。它比 Windows 自带 Terminal 多的不是传输层那点能力,而是对高频操作的整理:把设备存成会话、把认证方式固定、把重复命令做成按钮和脚本。你手上这份中文汉化绿色版,和官方原版在功能逻辑上没有区别,只是语言包和默认参数的不同,所以我下面讲的所有配置路径,照着做就行。
2. 新建会话到安全认证:把 SSH 连接参数吃透
2.1 新建会话前先核对五个字段,别急着点连接
很多第一次接触这类工具的人,拿到软件就点 Quick Connect,输入 IP、用户名、密码连上去就完事。能通,但下一次还是得重新输。真正该走的路径是 File → Connect → New Session,在弹出框里建一个带名字的会话条目,之后每次双击就进。新建会话时,最关键的五个字段按顺序核对:
| 字段 | 推荐值 | 说明 |
|---|---|---|
| Protocol | SSH2 | 默认就是它,不要选 SSH1,旧协议有安全缺陷 |
| Hostname | 设备 IP 或域名 | 端口不写默认 22,如果改了端口在这里填 |
| Port | 22 | 除非服务端改过监听端口 |
| Username | 登录用户名 | 可以留空,连接时再输 |
| Authentication | PublicKey / Password | 按你的认证环境选,见 2.2 |
协议选 SSH2 而不是 Telnet,原因很直白:Telnet 的账号密码和所有流量都是明文,在机房内部还能用,跨网段、走公网就等着被截。SSH2 在传输层加密,主机密钥校验也能防中间人。现在绝大多数 Linux 发行版默认不带 Telnet 服务端了,没必要给自己找麻烦。
参数填完之后,建议在 Connect 按钮旁边找到 Save session 选项,把当前配置落盘。这一步的价值在换电脑时最明显:配置目录一拷,所有设备条目带过去,不用重新录入。后面第 5 章会具体讲配置备份的坑。
2.2 公钥认证配置:把密码弹窗这件事一次根除
密码登录最大的问题不是慢,而是每台设备一个密码,记不住。常见做法是切到公钥认证:你自己生成一对密钥,把公钥放到服务器的 authorized_keys 里,以后连接时客户端出示私钥签名,服务端验签通过就直接进,全程不弹密码框。
先在本地生成密钥对,我一般用 RSA 4096 或者 ed25519,后者更短更快,OpenSSH 7.0 以上都支持:
# 生成 ed25519 密钥对,-C 是注释,标注用途方便管理 ssh-keygen -t ed25519 -C "dev-$(hostname)" -f ~/.ssh/id_ed25519 -N ""命令里-t指定算法,-f指定私钥存放路径,-N ""表示私钥不设口令,这样 SecureCRT 连接时不用再输一次私钥密码。如果对安全要求高,可以去掉-N "",但每次连接要额外输入私钥口令,看你的取舍。
公钥上传到服务器,最简单的做法是 ssh-copy-id,没有这个命令的手动追加:
# 把公钥内容追加到目标机对应用户的 authorized_keys 文件里 ssh-copy-id -i ~/.ssh/id_ed25519.pub user@192.168.1.10 # 手动方式:cat id_ed25519.pub >> ~/.ssh/authorized_keys然后回到 SecureCRT 的会话属性:Session Options → Connection → Authentication,勾选 PublicKey,下面选择 Private Key 文件,指向刚才生成的私钥路径。这里有个细节:SecureCRT 默认只认自己的密钥格式,新版支持 OpenSSH 生成的私钥,但如果你拿到的是 PuTTY 的 .ppk 文件,得先用工具转成 OpenSSH 格式,否则导入时报格式错误。判断标准很简单:私钥文件第一行是-----BEGIN OPENSSH PRIVATE KEY-----就能直接用,凡是PuTTY-User-Key-File开头的都需要转换。
2.3 终端仿真与字符集:为什么你的中文全是方块
连接本身通了,屏幕上中文乱码,这问题几乎每个人都会遇到一次。大部分情况下不是 SSH 传输问题,而是终端仿真和字符集不匹配。SecureCRT 里两个地方决定显示效果:Terminal 仿真类型和字符编码。
仿真类型在 Session Options → Terminal → Emulation,默认是 VT100 或 xterm。连接 Linux 服务器,建议选 xterm,颜色渲染和按键映射最贴近现代终端。连接老式网络设备或者串口,有时候要切到 VT100,否则方向键和 Tab 键不响应。字符编码在 Session Options → Terminal → Appearance → Character Encoding,连 Linux 选 UTF-8,连 Windows 下跑的中文服务可能要用 GB2312 或 GBK。记一条规律:服务器 locale 是 UTF-8,客户端就选 UTF-8;服务端输出 GBK 编码,你选 UTF-8 必然是乱码。
判断服务端编码,登录后执行echo $LANG,看到zh_CN.UTF-8就是 UTF-8,看到 GBK 相关字样就是 GB2312。还有一种翻车场景:SecureCRT 本身显示正常,但用 SFTP 传到 Windows 的文件名是乱码——那是 Windows 资源管理器解码问题,和终端没关系。别在这上面浪费太多时间,文件内容没乱就行。
3. 会话组织和跳板机:几十台设备的登录信息整理术
3.1 会话文件夹与克隆:新设备接入五分钟搞定
设备多了以后,会话列表就是纯文本列表,找设备靠滚轮,显然不现实。SecureCRT 的会话树支持像文件目录一样建文件夹,我一般按项目 / 区域 / 角色三层分:机房 A → Web 集群 → web-01、web-02。选中一个会话,右键选 Clone Session,改个主机名和备注就是新设备条目,不用从头填参数。
这里有个省时间的习惯:先建好一个"模板会话",所有公共参数——终端仿真 xterm、编码 UTF-8、字体大小、日志目录、按钮栏——都配好,然后 Clone 若干份,每份只改 Hostname 和 Username。模板会话本身不要用来连接,就放在会话树最顶部当模板用。这样新设备接入时,从模板复制一个,改 IP、存盘、双击连,整个过程不到五分钟。
会话文件夹管理不需要额外配置,右键直接在会话树里新建文件夹,拖动会话条目就能归入。如果你想批量调整一堆会话的公共参数(比如把端口从 22 改成 2222),不用一个个会话打开属性改,可以直接操作会话配置文件,见 3.3。
3.2 通过跳板机登录内网:防火墙代理配置的完整路径
实际工作里经常遇到场景:公司网络里,办公电脑不能直接访问生产内网,必须先登录一台跳板机,再从跳板机跳到目标设备。SecureCRT 原生支持这种代理连接,不需要手动开两个窗口。
配置路径:Session Options → Connection → Firewall → Edit,新建一条规则,类型选 SSH 代理(有的版本叫 Proxy)。填跳板机地址、端口、用户名、认证方式。保存后回到会话属性,Firewall 下拉框选中刚才建的规则。连接目标会话时,SecureCRT 会先自动建立到跳板机的连接,然后通过它再连目标机,整个过程在你看来就是双击一个会话的事。
另一种做法是本地端口转发,适合访问内网里的数据库或 HTTP 服务。给一个命令行的等价操作,便于你理解 SecureCRT 内部干了什么:
# -L 把本地 3306 端口转发到内网 MySQL 的 3306,-N 不执行命令,-f 后台运行 ssh -L 3306:192.168.1.20:3306 user@192.168.1.10 -N -f这个命令执行后,本机连接127.0.0.1:3306等价于连接内网192.168.1.20:3306。SecureCRT 的防火墙代理本质上就是这个隧道逻辑,但把隧道生命周期绑定到了会话上,断开会话转发自动结束。要注意的是,内网地址必须是跳板机视角能到达的地址,不是本机视角——你拿本机 IP 地址填进去肯定转发不了。
3.3 批量修改会话参数:直接改配置文件比 GUI 逐条改快
当你维护了四五十个会话,突然要全部改端口或者换用户名,GUI 逐条改会改到怀疑人生。SecureCRT 的会话配置落盘是独立的配置文件,每个会话一条 .ini 记录,配置文件用 UTF-16 LE 编码存储,Windows 下记事本打开会看到一串串NUL字符,这是正常现象,别以为是文件坏了。
这类配置文件适合用脚本来改。我写过一个批量把端口从 22 换成 2222 的小脚本,思路是遍历会话目录下所有 .ini 文件,做文本替换后原编码回写:
import os # 会话目录通常在 AppData 下,具体路径见会话管理器里的配置目录 sess_dir = os.path.expandvars(r"%APPDATA%\VanDyke\Config\Sessions") changed = [] for fn in os.listdir(sess_dir): if not fn.endswith(".ini"): continue path = os.path.join(sess_dir, fn) # SecureCRT 的会话配置是 UTF-16 LE 编码 with open(path, "r", encoding="utf-16") as f: content = f.read() new_content = content.replace('"Port"=22', '"Port"=2222') if new_content != content: with open(path, "w", encoding="utf-16") as f: f.write(new_content) changed.append(fn) print("已修改:", changed)这个脚本要改参数,核心就是替换"Port"=22这类键值。注意两点:一是回写必须用utf-16编码,用默认utf-8写回去文件就废了;二是改之前备份整个 Sessions 目录,改坏了能退回去。跑批前先挑一个 .ini 文件打开确认字段名,不同版本字段名可能有差异,以实际文件内容为准。
4. 登录自动化与按钮栏:把重复操作压缩成一个回车
4.1 用 Python 脚本代替手工敲命令:WaitForString 的核心用法
SecureCRT 7 以上内置脚本引擎,支持 Python,这让"登录后自动执行一串命令"变成了一件极其顺手的事。脚本能访问当前会话、标签页、窗口,然后模拟键盘输入、做条件等待、逐行读输出。常见的登录场景:连上设备、自动进入工作目录、加载环境变量、打印运行状态,全部自动化。
下面是一个最基础的脚本,连接后自动发命令并抓取输出:
# 将脚本绑定到按钮栏或会话登录动作后,连接建立时会自动执行 import time def main(): # 发送一条命令并等待提示符返回 crt.Screen.Send("cd /opt/app && ls -l\n") crt.Screen.WaitForString("]# ") # 再发一条命令,确认服务状态 crt.Screen.Send("systemctl status nginx --no-pager\n") crt.Screen.WaitForString("]# ") main()这里crt是 SecureCRT 注入的全局对象,不用导入。Screen.Send模拟键盘输入,字符串末尾必须有换行符\n,否则命令不会执行。WaitForString是脚本里最重要的函数,它阻塞等待屏幕输出中出现指定字符串才继续往下走,比crt.Sleep可靠得多——固定 sleep 1 秒在慢机器上经常不够,WaitForString 按输出判断,服务器再慢也能等。
写脚本时有个注意点:WaitForString等待的字符串要和当前 shell 提示符严格匹配。如果 prompt 是[root@localhost ~]#,你等一个]$就会超时。调试阶段先把提示符打印出来看,脚本里加一段crt.Screen.ReadString(0, 1000)看看实际输出,比盲猜快得多。
4.2 按钮栏:把高频命令变成一键操作
自动化脚本的轻量替代方案是按钮栏。View → Button Bar 打开,右键按钮栏选 Customize,能看到一排预设按钮和命令编辑框。按钮可以绑定一段静态命令字符串,也可以绑定编写好的 Python 脚本文件。我一般这样规划按钮:
| 按钮名 | 绑定内容 | 适用场景 |
|---|---|---|
| 磁盘 | df -h; free -m | 登录后快速看资源占用 |
| 日志 | tail -f /var/log/messages | 盯实时日志 |
| 清缓存 | sync; echo 3 > /proc/sys/vm/drop_caches | 测性能前清理缓存 |
| 批量脚本 | 调用 4.3 的 Python 脚本 | 循环处理多台机器 |
右键随便一个按钮可以修改它的命令、图标和发送方式。发送方式选 Send String to Tab(发送到当前标签页),按钮点击后在当前光标位置执行。这里的细节是:按钮绑定的命令里换行要写成\n或直接用界面上的";"分隔多个命令,不要用&&一条条连太长,按钮栏空间就那么大,太长容易点错。
4.3 循环处理多台设备:在脚本里控制会话生命周期
按钮栏最适合单台设备操作,如果你要对五台机器同时执行同一条命令,手点五个标签页再粘贴命令,效率太低。用脚本循环打开新标签页,逐个发命令,最后统一收输出:
# 循环打开多个会话标签页,发送命令并自动关闭 def main(): # 传入已命名会话,连接成功后发送命令 sessions = ["web-01", "web-02", "db-01"] for name in sessions: tab = crt.Session.ConnectInTab("/S " + name) tab.Screen.Send("uptime\n") # 等待输出,给足超时时间 tab.Screen.WaitForString("]# ", 10) tab.Session.Disconnect() main()ConnectInTab是脚本里打开新标签页的标准入口,/S后面跟的是会话名,必须是会话树里存在的条目。脚本最后一个循环做的是发命令、等输出、断开,不会污染你的工作窗口。实际用的时候建议把uptime换成你要批量执行的命令,输出结果如果要留存,在循环里把每台机器的输出追加写入本地日志文件。
这里有个常被忽略点:ConnectInTab 的/S参数必须和会话名完全一致,包含空格的话整个名称用引号包起来。会话名变了脚本就失效,所以脚本要么绑定到模板会话,要么每次用前核对会话名。
5. 避坑与排查:连接失败、乱码、会话丢失的五个现场
5.1 SSH 连接超时,报 Connection timed out
现象:新建会话点连接,等十几秒后提示超时,SSH 端口一直无响应。原因有三类:目标 IP 不通、防火墙挡了 22 端口、服务端 sshd 没起来。解决思路分三层排查:先ping看网络通不通,再telnet 目标IP 22看端口通不通,最后如果都在跳板机环境里就要检查代理连接配置的 Firewall 规则是否写对跳板机地址。ping 不通是路由问题,telnet 连不上 22 是防火墙或服务问题。还有个玄学点:有些云厂商安全组默认只开 80/443,22 没放行,这种是安全组策略问题,跟本机无关。
5.2 密码没错,但反复弹密码框
现象:公钥认证配置好之后,连接仍然弹密码框,输入正确密码进是能进,但每次连接都要输。原因:会话属性里 Authentication 同时勾选了 Password 和 PublicKey,SecureCRT 按顺序尝试先请求密码认证,实际行为是弹框让你输密码。解决:把认证方式列表里删掉 Password,只留 PublicKey,顺序也会影响——把 PublicKey 拖到最上面,优先尝试密钥。另一个相关原因是私钥文件路径写错或者权限不对,Windows 下私钥文件如果被安全软件锁了,读取失败也会回退到密码认证。处理方式是把私钥拷贝到自定义目录,避开权限问题。
5.3 换台电脑后会话全部丢失
现象:换新电脑,装好软件,打开会话管理器,一个条目都没了,以为白配了。原因:SecureCRT 默认把所有会话存在本地 AppData 配置目录,装软件不会自动同步这部分数据。解决:去原电脑的配置目录找到 Sessions 文件夹整体拷贝,放到新电脑对应位置的相同路径。判断对你配置目录的方法:在会话管理器里点开一个会话的属性,看配置文件路径。迁移后确认编码没改变,如果是从旧版导出再导入,会话里的认证信息可能会丢,需要重新输入一遍密码。从那以后我每次换电脑,第一件事就是备份整个 Config 目录,不单独导出单个会话。
5.4 脚本发送的命令带 ^M 换行符,执行报错
现象:脚本里写crt.Screen.Send("ls\r\n"),在 Linux 下执行命令没错,但读到的 shell 历史记录里全是^M,个别程序还报参数错误。原因:\r\n是 Windows 行尾,Linux shell 对这种输入一般还能容忍,但传给某些程序做参数就会翻车。解决:脚本里统一用\n,不要用\r\n。如果已经有脚本犯了这个错,在脚本代码里做一次清洗:cmd.replace('\r', '')再发送。这个坑最容易出现在从 Windows 记事本编辑脚本然后直接运行的场景,记事本默认换行是 CRLF,脚本内容本身带了\r,发给远端就更乱了。建议代码编辑器统一设成 LF 换行。
5.5 中文乱码在换了终端类型后更严重
现象:之前是少量方块,切了仿真类型变成一大堆乱码甚至花屏。原因:不同仿真类型对字符序列的解释不一样,VT100 对 UTF-8 多字节字符支持很差。解决:确认服务端 locale 后固定仿真为 xterm,字符编码显式设 UTF-8,不要用 Auto 检测模式。Auto 在某些老设备上会误判成 ISO-8859-1 之类。还有个办法:SecureCRT 的 Session Options 里把 "Display line drawing characters" 关掉,部分花屏问题是线绘图字符冲突导致,不是编码问题。
6. 进阶:X11 转发与串口调试,把 SecureCRT 用成万能控制台
6.1 X11 转发:让 Linux GUI 程序显示到 Windows 桌面
有时候远程设备上要跑图形工具,比如xclock、xeyes这种小工具验证环境,或者老设备的图形配置界面。X11 转发可以把服务端的 GUI 显示到本地。先确认本地装了 X server,Windows 上装一个 Xming 或 VcXsrv,在 SecureCRT 会话属性里找到 Connection → Port Forwarding,勾选 Forward X11 data。连接后执行echo $DISPLAY,如果输出localhost:10.0之类就说明转发生效了,然后启动任何 GUI 程序就会弹到本地客户端桌面上。我实际用的场景是远程执行一个系统安装向导,没有转发就得在纯字符界面里盲操作,体验完全两个世界。
6.2 串口会话:调试交换机路由器 console 口的参数表
SecureCRT 不只是 SSH 客户端,它还带串口连接能力。嵌入式设备、交换机、路由器的 console 口调试,很多时候现场没有额外串口工具,SecureCRT 一个软件全干。新建会话时协议选 Serial,会话选项里设置端口参数,我一般直接记这张表:
| 参数 | 常见值 | 说明 |
|---|---|---|
| Port | COM3 / 设备管理器查 | Windows 下的串口号 |
| Baud rate | 9600 或 115200 | 老设备多为 9600,新设备 115200 |
| Data bits | 8 | 几乎都是 8 |
| Stop bits | 1 | 标准配置 |
| Parity | None | 几乎不校验 |
| Flow control | None | 如果开流控可能导致输入卡顿 |
串口连不上八成是波特率不对,或者占用串口的程序没关。SecureCRT 连接串口前,Windows 设备管理器里确认一下该 COM 口没有被其他工具占用,否则提示 Access Denied。
6.3 日志自动记录:排查问题时的后悔药
最后一个养成习惯的技巧:给每个会话默认开日志记录。Session Options → Log File,设置统一的日志目录,文件名用时间戳变量自动命名。这样每次连接会话,所有操作输出都自动落到本地文件。排查问题时直接翻日志比重新复现快得多。变量名如%Y-%m-%d_%H%M%S表示日期时间,SessionName 表示会话名,组合成D:\logs\%SessionName%_%YM%M%D_%H%M%S.log这种格式。从那以后我每次拿到新设备,都不急着连,先把日志目录和字符集这两件事定下来,再谈别的。这套流程跑顺了,不管是 SSH 下的 Linux 运维还是串口下的交换机调试,都是一套思路。希望帮到你。
本文还有配套的精品资源,点击获取