Loading... # Trzsz-ssh ( tssh ) 增强型 SSH 客户端技术分析 # 一、概述 ## 1. 简介 ### A. 是什么 trzsz-ssh(简称 tssh)是一个 ssh 客户端的直接替代品,提供与 openssh 完全兼容的基础功能,同时实现多种实用的扩展功能。它由 lonnywong 开发,采用 MIT 许可证开源。 ### B. 为什么使用 - 解决服务器管理中记忆大量别名的困扰 - 提供交互式登录界面,支持搜索和批量选择 - 内置 trzsz 文件传输功能,无需额外开启窗口 - 支持批量登录多台服务器并执行预设命令 - 支持记住密码和自动交互,提升登录效率 - 与 tsshd 配合使用,适用于弱网环境,保持会话不中断 ### C. 核心特性 - 兼容 openssh 配置和基础功能 - 内置 TUI 登录界面,支持搜索和多选 - 集成 trzsz 和 zmodem 文件传输 - 支持记住密码、记住答案(键盘交互认证) - 支持 UDP 模式,适合高延迟弱网环境 - 支持批量登录并执行预设命令 - 支持自动交互(类似 expect 功能) # 二、安装方法 ## 1. 系统要求 - 支持 Windows、macOS、Linux、ChromeOS 等多种平台 - Go 版安装需要 go 1.20 以上版本 ## 2. 安装方式 ### A. Windows 系统 ```bash # 使用 scoop 安装 scoop install tssh # 使用 winget 安装 winget install tssh # 使用 Chocolatey 安装 choco install tssh ``` ### B. macOS 系统 ```bash # 使用 Homebrew 安装 brew install trzsz-ssh ``` ### C. Linux 系统 ```bash # Ubuntu/Debian 系统 sudo apt install tssh # 使用 yum 安装 sudo yum install tssh # ArchLinux 系统 yay -S tssh # ChromeOS 系统 crew install tssh ``` ### D. 使用 Go 安装 ```bash # 直接安装最新版本 go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest # 或从源码编译安装 git clone https://github.com/trzsz/trzsz-ssh.git cd trzsz-ssh sudo make install ``` ### E. 从发布包安装 可从 GitHub Releases 下载预编译版本,国内用户可从 Gitee 发行版下载。 # 三、工作原理 ## 1. 基本架构 ```mermaid graph TB A[tssh 客户端] --> B[SSH 协议层] B --> C{连接模式} C -->|TCP 模式| D[标准 SSH 连接] C -->|UDP 模式| E[tsshd 服务端] D --> F[远程服务器] E --> F A --> G[TUI 登录界面] A --> H[trzsz 传输层] A --> I[自动交互模块] A --> J[批量登录模块] ```  ## 2. 核心模块 - SSH 协议层:兼容 openssh 的 SSH 协议实现 - TUI 界面:交互式终端用户界面,支持搜索和多选 - 文件传输层:集成 trzsz 和 zmodem 协议 - 认证模块:支持密码、公钥、键盘交互等多种认证方式 - UDP 模块:与 tsshd 配合,实现 UDP 传输模式 ## 3. 配置文件结构 tssh 使用标准的 openssh 配置文件格式,并进行了扩展: - 主配置文件:~/.ssh/config - 扩展配置文件:~/.ssh/password - tssh 专属配置:~/.tssh.conf 或 $XDG_CONFIG_HOME/tssh/tssh.conf # 四、核心功能 ## 1. 登录界面 ### A. 启动方式 ```bash # 直接运行 tssh 命令 tssh # 或者有除目标机器外的其他参数 tssh -o ServerAliveInterval=60 ``` ### B. 配置要求 使用前需要配置好 ~/.ssh/config 文件: ```bash # 基本配置示例 Host server1 HostName 192.168.1.100 User admin Port 22 IdentityFile ~/.ssh/id_rsa Host server2 HostName 192.168.1.101 User root ``` ### C. 快捷键支持 | 操作 | 全局快捷键 | 非搜索快捷键 | 描述 | |------|-----------|-------------|------| | 确认登录 | Enter | - | 确认并登录选中的服务器 | | 退出 | Ctrl+C / Ctrl+Q | q / Q | 取消并退出登录界面 | | 上移 | Ctrl+K / Shift+Tab / ↑ | k / K | 往上移动光标 | | 下移 | Ctrl+J / Tab / ↓ | j / J | 往下移动光标 | | 上翻页 | Ctrl+H / Ctrl+U / Ctrl+B / PageUp / ← | h / H / u / U / b / B | 往上翻一页 | | 下翻页 | Ctrl+L / Ctrl+D / Ctrl+F / PageDown / → | l / L / d / D / f / F | 往下翻一页 | | 跳到首页 | Home | g | 跳到第一行 | | 跳到尾页 | End | G | 跳到最尾行 | | 擦除搜索 | Ctrl+E | e / E | 擦除搜索关键字 | | 切换搜索 | / | - | 切换搜索功能 | | 切换帮助 | ? | - | 切换帮助信息 | | 切换选中 | Ctrl+X / Ctrl+Space / Alt+Space | Space / x / X | 切换当前项的选中状态 | | 全选 | Ctrl+A | a / A | 全选当前页 | | 反选 | Ctrl+O | o / O | 反选当前页 | | 新窗口批量登录 | Ctrl+W | w / W | 以新窗口方式批量登录 | | 新 Tab 批量登录 | Ctrl+T | t / T | 以新 Tab 方式批量登录 | | 分屏批量登录 | Ctrl+P | p / P | 以分屏方式批量登录 | ## 2. 批量登录 ### A. 基本用法 支持在 iTerm2、tmux 和 Windows Terminal 中一次选择多台服务器进行批量登录。 ### B. 批量执行命令 ```bash # 批量执行命令后进入交互式 shell tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash -l' # Windows Terminal 中(不支持分号) tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash -l" ``` ### C. 分组标签配置 当服务器数量较多时,可以使用 GroupLabels 进行分组: ```bash # 配置示例 Host test* #!! GroupLabels group1 group2 Host testAA #!! GroupLabels label3 label4 group5 ``` 按 / 键输入分组标签后,可以快速筛选目标服务器。 ## 3. 文件传输 ### A. 支持 trzsz trzsz 是一个兼容 tmux 的文件传输工具,类似 lrzsz(rz / sz),但支持进度条和目录传输。 **服务器端安装**: ```bash # 推荐 Go 版 go install github.com/trzsz/trzsz-go/cmd/trz@latest go install github.com/trzsz/trzsz-go/cmd/tsz@latest # 或使用 tssh 自动安装 tssh --install-trzsz server_name ``` **客户端配置**: ```bash Host server1 #!! EnableDragFile Yes #!! DragFileUploadCommand trz -y ``` **使用方式**: 1. 拖拽文件到终端自动上传(需要启用 EnableDragFile) 2. 使用命令行参数上传: ```bash tssh --upload-file /path/to/file1 --upload-file /path/to/dir2 server_name ``` ### B. 支持 zmodem 对于传统的 rz / sz 工具,tssh 也提供了支持。 **配置启用**: ```bash Host server1 #!! EnableZmodem Yes #!! DragFileUploadCommand rz ``` **本地安装 lrzsz**: ```bash # Windows scoop install lrzsz choco install lrzsz winget install lrzsz # Linux sudo apt install lrzsz # Ubuntu/Debian sudo yum install lrzsz # CentOS/RHEL ``` ### C. 文件下载 使用 trzsz 下载: ```bash tssh -t --client --download-path /tmp/ server_name 'tsz -d /path/to/file1 /path/to/dir2' ``` 使用 zmodem 下载: ```bash tssh -t --client --zmodem --download-path /tmp/ server_name 'sz /path/to/file1 /path/to/file2' ``` ## 4. 记住密码 ### A. 密码加密 tssh 提供了简单的密码加密功能,防止密码明文存储: ```bash # 生成加密密码 tssh --enc-secret # 输入密码后得到密文串 ``` ### B. 配置方式 **在 ~/.ssh/config 中配置**(使用 #!! 前缀兼容标准 ssh): ```bash Host test1 #!! encPassword 756b17766f45bdc44c37f811db9990b0880318d5f00f6531b15e068ef1fde2666550 ``` **在 ~/.ssh/password 中配置**(无需前缀): ```bash Host test2 encPassword 051a2f0fdc7d0d40794b845967df4c2d05b5eb0f25339021dc4e02a9d7620070654b ``` ### C. 通配符配置 ```bash # test1 和 test2 使用特定密码 Host test1 #!! encPassword xxx1 Host test2 encPassword xxx2 # 其他 test* 使用通用密码 Host test* Password 111111 ``` ### D. 私钥 Passphrase ```bash Host server1 IdentityFile /path/to/id_rsa #!! encPassphrase 6f419911555b0cdc84549ae791ef69f654118d734bb4351de7e83163726ef46d176a ``` ## 5. 自动交互 类似于 expect 的自动交互功能,在登录服务器后自动匹配输出并输入。 ### A. 基本配置 ```bash Host auto #!! ExpectCount 2 #!! ExpectTimeout 30 #!! ExpectPattern1 *assword #!! ExpectSendPass1 d7983b4a8ac204bd073ed04741913befd4fbf813ad405d7404cb7d779536f8b87e71106d7780b2 #!! ExpectPattern2 hostname*$ #!! ExpectSendText2 echo tssh expect\r ``` ### B. 条件交互 在匹配到指定输出前,如果遇到可选匹配则自动输入: ```bash Host case #!! ExpectCount 1 #!! ExpectPattern1 hostname*$ #!! ExpectSendText1 ssh xxx\r #!! ExpectCaseSendText1 yes/no y\r #!! ExpectCaseSendText1 y/n yes\r ``` ### C. TOTP 双因子认证 ```bash Host totp #!! ExpectCount 2 #!! ExpectPattern1 token: #!! ExpectSendTotp1 xxxxx #!! ExpectPattern2 token: #!! ExpectSendEncTotp2 821fe830270201c36cd1a869876a24453014ac2f1d2d3b056f3601ce9cc9a87023 ``` ### D. 动态密码命令 ```bash Host otp #!! ExpectCount 2 #!! ExpectPattern1 token: #!! ExpectSendOtp1 oathtool --totp -b xxxxx #!! ExpectPattern2 token: #!! ExpectSendEncOtp2 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4 ``` ## 6. UDP 模式 与 tsshd 配合使用,适用于高延迟的弱网连接。 ### A. 安装 tsshd ```bash # 使用 tssh 自动安装 tssh --install-tsshd server_name # 或手动安装 go install github.com/trzsz/tsshd/cmd/tsshd@latest ``` ### B. 配置启用 ```bash Host xxx #!! UdpMode Yes #!! TsshdPath ~/go/bin/tsshd ``` ### C. 使用方式 ```bash # 命令行指定 tssh --udp server_name tssh --kcp server_name # 使用 KCP 协议 ``` ### D. 工作原理 ```mermaid sequenceDiagram participant C as tssh 客户端 participant S as SSH 服务器 participant T as tsshd 进程 C->>S: 正常 SSH 登录 S->>T: 启动 tsshd 进程 T->>T: 随机监听 UDP 端口(61001-61999) T->>C: 返回端口和密钥 C->>S: 关闭 SSH 连接 C->>T: 建立 UDP 连接 Note over C,T: 后续通讯走 UDP 通道 ```  ### E. UDP 配置项 | 配置项 | 说明 | 默认值 | |--------|------|--------| | UdpMode | UDP 模式:No/Yes/QUIC/KCP | No | | TsshdPort | tsshd 监听端口范围 | 61001-61999 | | TsshdPath | tsshd 程序路径 | $PATH 中查找 | | UdpAliveTimeout | 断开连接超时退出时间 | 86400 秒 | | UdpHeartbeatTimeout | 断开连接重连尝试时间 | 3 秒 | | UdpReconnectTimeout | 显示失去连接通知时间 | 15 秒 | | ShowNotificationOnTop | 是否在顶部显示通知 | yes | | ShowFullNotifications | 是否显示完整通知 | yes | | UdpProxyMode | UDP 代理模式:UDP/TCP | UDP | # 五、高级功能 ## 1. 主题风格 tssh 支持多种主题风格,可在配置文件中自定义。 ### A. 配置位置 $XDG_CONFIG_HOME/tssh/tssh.conf 或 ~/.tssh.conf ### B. 主题类型 **tiny 小巧风**: ```bash PromptThemeLayout = tiny ``` **simple 简约风**: ```bash PromptThemeLayout = simple ``` **table 表格风**: ```bash PromptThemeLayout = table ``` ### C. 自定义颜色 ```bash PromptThemeColors = { "active_host": "magenta|bold", "inactive_host": "magenta" } ``` ## 2. 其他集成功能 ### A. Wayland 集成 ```bash Host xxx #!! EnableWaypipe Yes #!! WaypipeClientPath /usr/bin/waypipe #!! WaypipeServerPath /usr/bin/waypipe #!! WaypipeClientOption -c lz4 #!! WaypipeServerOption -c lz4 ``` ### B. 剪贴板集成 ```bash Host * #!! EnableOSC52 Yes ``` Linux 系统需要安装 xclip 或 xsel: ```bash sudo apt install xclip # Ubuntu/Debian sudo yum install xclip # CentOS/RHEL ``` ### C. scp/sftp 支持 ```bash # 使用 tssh 的功能 scp -S tssh file server:/path/ sftp -S tssh server # 或配置 alias alias tscp='scp -S tssh' alias tsftp='sftp -S tssh' ``` ## 3. SSH 控制台 类似 OpenSSH escape sequences 的功能。 ### A. 支持的操作 - 发送转义字符 ~ - 暂停当前 SSH 进程(^Z,相当于 Ctrl+Z) - 退出当前 SSH 会话(.,相当于 Exit/Kill) ### B. 配置 ```bash Host xxx EscapeChar ~ #!! ConsoleEscapeTime 1 # 设置为 0 可禁用控制台 ``` # 六、个性配置 在 ~/.tssh.conf 中可配置以下内容: ```bash # SSH 配置路径 ConfigPath = ~/.ssh/config # 扩展配置路径 ExConfigPath = ~/.ssh/password # trz 上传时对话框打开的路径 DefaultUploadPath = ~/Downloads # tsz 下载时自动保存的路径 DefaultDownloadPath = ~/Downloads # 全局拖拽文件上传命令 DragFileUploadCommand = trz -y # trzsz 进度条颜色 ProgressColorPair = B14FFF 00FFA3 # 登录界面主题风格 PromptThemeLayout = simple PromptThemeColors = {"active_host": "magenta|bold", "inactive_host": "magenta"} # 每页显示记录数 PromptPageSize = 10 # 默认进入搜索模式 PromptDefaultMode = search # 详情中显示的配置列表 PromptDetailItems = Alias Host Port User GroupLabels IdentityFile ProxyCommand ProxyJump RemoteCommand UdpMode TsshdPath # 自定义光标和选中图标 PromptCursorIcon = [*] PromptSelectedIcon = [x] # 登录后自动设置终端标题 SetTerminalTitle = Yes ``` # 七、故障排除 ## 1. Warp 终端问题 旧版本 Warp 终端需要特殊配置: ### A. 创建软链接 ```bash sudo ln -sv $(which tssh) /usr/local/bin/ssh ``` ### B. 创建 shell 函数 在 ~/.bash_profile 或 ~/.zshrc 中添加: ```bash tssh() { if [ $# -eq 0 ]; then ssh FAKE_DEST_IN_WARP else ssh "$@" fi } ``` ### C. 拖拽问题 在 Warp 终端拖拽文件后可能需要多按一次回车键才会上传。 ## 2. Windows 7 兼容性 从 v0.1.21 起,默认 Windows 版本不再支持 Windows 7。需要从 GitHub Releases 下载带有 win7 关键字的版本。 ## 3. 配置兼容性 如果标准 ssh 报错 Bad configuration option,可以在 tssh 特有配置项前加上 #!! 前缀: ```bash Host server1 #!! EnableDragFile Yes # tssh 特有配置 Port 22 # 标准 ssh 配置 ``` # 八、使用场景 ## 1. 运维管理 - 管理大量服务器,通过搜索快速定位 - 批量登录多台服务器执行相同操作 - 分组管理不同环境的服务器 ## 2. 弱网环境 - 使用 UDP 模式应对高延迟网络 - 网络切换、休眠唤醒后自动重连 - 与 tsshd 配合实现稳定的远程连接 ## 3. 文件传输 - 拖拽上传文件,无需额外开启终端 - 支持 trzsz 和 zmodem 两种传输方式 - 进度条显示,传输状态清晰可见 ## 4. 自动化运维 - 自动输入密码和验证码 - 支持 TOTP 双因子认证 - 批量执行预设命令 # 九、最佳实践 ## 1. 配置管理 - 使用 #!! 前缀保持与标准 ssh 的兼容性 - 合理使用通配符配置简化管理 - 使用加密密码保护敏感信息 ## 2. 安全建议 - 优先使用公钥认证而非密码 - 设置配置文件权限:chmod 600 ~/.ssh/password - 定期更新 tssh 到最新版本 ## 3. 效率提升 - 使用分组标签快速定位服务器 - 配置 DefaultDownloadPath 避免重复选择 - 使用批量登录功能提高运维效率 # 十、参考资料 1. [Trzsz-ssh ( tssh ) 中文文档](https://trzsz.github.io/cn/ssh.html) 2. [trzsz-ssh GitHub 仓库](https://github.com/trzsz/trzsz-ssh) 3. [tsshd GitHub 仓库](https://github.com/trzsz/tsshd) 4. [trzsz Go 版文档](https://trzsz.github.io/cn/go) 最后修改:2026 年 01 月 29 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏