MCPcopy
hub / github.com/trzsz/trzsz-ssh

github.com/trzsz/trzsz-ssh @v0.1.25 sqlite

repository ↗ · DeepWiki ↗ · release v0.1.25 ↗
798 symbols 2,922 edges 71 files 127 documented · 16%
README

trzsz-ssh(tssh): 高度兼容 OpenSSH 并提供丰富扩展功能的 SSH 客户端

MIT License GitHub Release WebSite 中文文档

trzsz-ssh ( tssh ) 设计为 ssh 客户端的直接替代品,提供与 openssh 完全兼容的基础功能,同时实现其他有用的扩展功能。

trzsz-ssh ( tssh ) 与 tsshd 一起,适用于高延迟的弱网连接,切换网络、休眠与唤醒都不会掉线,让 ssh 会话永远保持。

为什么做

  • 服务器太多,记不住所有别名,tssh 内置登录界面,支持搜索和选择服务器登录。

  • tssh 登录服务器后,内置支持 trzsz ( trz / tsz ) 工具,传文件无需另外新开窗口。

  • 有时需要同时登录一批机器,tssh 支持多选并批量登录,同时支持执行预设的命令。

  • 有些服务器不支持公钥登录,tssh 支持记住密码,支持自动交互,提升登录的效率。

  • 在 Windows 中使用 tssh 代替 trzsz ssh,可以解决 trz 上传速度很慢的问题。

  • tsshtsshd 类似于 mosh,解决了部分 mosh 的问题,例如 SSH 转发和 ProxyJump 等。

安装方法

客户端安装 trzsz-ssh ( tssh ) 的方法如下( 任选其一 ):

  • Windows 可用 scoop / winget / choco 安装

scoop install tssh / winget install tssh / choco install tssh

sh scoop install tssh

sh winget install tssh

sh choco install tssh

  • MacOS 可用 Homebrew 安装

brew install trzsz-ssh

sh brew install trzsz-ssh

  • Ubuntu 可用 apt 安装

sudo apt install tssh

```sh sudo apt update && sudo apt install software-properties-common sudo add-apt-repository ppa:trzsz/ppa && sudo apt update

sudo apt install tssh ```

  • Debian 可用 apt 安装

sudo apt install tssh

```sh sudo apt install curl gpg curl -s 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x7074ce75da7cc691c1ae1a7c7e51d1ad956055ca' \ | gpg --dearmor -o /usr/share/keyrings/trzsz.gpg echo 'deb [signed-by=/usr/share/keyrings/trzsz.gpg] https://ppa.launchpadcontent.net/trzsz/ppa/ubuntu jammy main' \ | sudo tee /etc/apt/sources.list.d/trzsz.list sudo apt update

sudo apt install tssh ```

  • Linux 可用 yum 安装

sudo yum install tssh

  • 国内推荐使用 wlnmp 源,安装 tssh 只需要添加 wlnmp 源( 配置 epel 源不是必须的 ):

    ```sh curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash

    sudo yum install tssh ```

  • 也可使用 gemfury 源( 只要网络通,所有操作系统通用 )

    ```sh echo '[trzsz] name=Trzsz Repo baseurl=https://yum.fury.io/trzsz/ enabled=1 gpgcheck=0' | sudo tee /etc/yum.repos.d/trzsz.repo

    sudo yum install tssh ```

  • ArchLinux 可用 yay 安装

yay -S tssh

sh yay -Syu yay -S tssh

  • ChromeOS 可用 Chromebrew 安装

crew install tssh

sh crew install tssh

  • 用 Go 直接安装( 要求 go 1.25 以上 )

go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest

```sh # 最新发布版本 go install github.com/trzsz/trzsz-ssh/cmd/tssh@latest

# 最新开发版本( main 分支 ) go install github.com/trzsz/trzsz-ssh/cmd/tssh@main ```

安装后,tssh 程序一般位于 ~/go/bin/ 目录下( Windows 一般在 C:\Users\your_name\go\bin\ )。

  • 用 Go 自己编译( 要求 go 1.25 以上 )

sudo make install

sh git clone --depth 1 https://github.com/trzsz/trzsz-ssh.git cd trzsz-ssh make sudo make install

下载并本地安装

```sh sudo apt install /tmp/tssh_*.deb

sudo dpkg -i /tmp/tssh_*.deb

sudo dnf install /tmp/tssh_*.rpm

sudo yum install /tmp/tssh_*.rpm

sudo rpm -i /tmp/tssh_*.rpm

tar zxvf tssh_.tar.gz && sudo cp tssh_/tssh /usr/bin/ ```

登录界面

  • 使用之前,需要配置好 ~/.ssh/config ( Windows 是 C:\Users\xxx\.ssh\config, xxx 换成用户名 )。

  • 关于如何配置 ~/.ssh/config,请参考 openssh ( Match 中的 exec 暂时要参考下文配置 UseOpenSSHConfig 才支持 ),或参考 tssh wiki SSH基本配置

  • 直接无参数运行 tssh 命令就会打开登录界面,或者有除目标机器外的其他参数也会打开登录界面。

  • 如果目标机器参数是 ~/.ssh/config 中别名的一部分,不能完全匹配某个别名,也会打开登录界面。

  • 如果配置了 #!! HideHost yes,或者别名中含有 *? 通配符时,则不会显示在登录界面中。

  • tssh 支持很多快捷键,支持搜索,在 tmuxiTerm2Windows Terminal 等中使用时支持多选。

操作 全局快捷键 非搜索快捷键 快捷键描述
Confirm Enter 确认并登录
Quit/Exit Ctrl+C Ctrl+Q q Q 取消并退出
Move Prev Ctrl+K Shift+Tab ↑ k K 往上移光标
Move Next Ctrl+J Tab ↓ j J 往下移光标
Page Up Ctrl+H Ctrl+U Ctrl+B PageUp ← h H u U b B 往上翻一页
Page Down Ctrl+L Ctrl+D Ctrl+F PageDown → l L d D f F 往下翻一页
Goto Home Home g 跳到第一行
Goto End End G 跳到最尾行
EraseKeys Ctrl+E e E 擦除搜索关键字
TglSearch / 切换搜索功能
Tgl Help ? 切换帮助信息
TglSelect Ctrl+X Ctrl+Space Alt+Space Space x X 切换选中状态
SelectAll Ctrl+A a A 全选当前页
SelectOpp Ctrl+O o O 反选当前页
Open Wins Ctrl+W w W 新窗口批量登录
Open Tabs Ctrl+T t T 新 Tab 批量登录
Open Pane Ctrl+P p P 分屏批量登录

主题风格

  • tssh 支持多种主题风格,在 $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeLayout 选用。欢迎一起来创造更多更好看的。

  • 每种主题风格都支持自定义颜色,在 $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeColors,只要配置非默认的颜色即可。

  • 请为你喜欢的主题风格❤️投票❤️,得票数最高的主题风格将会在下个版本被设置为默认主题。

tiny 小巧风

  • $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeLayout = tiny 选用 tiny 小巧风tssh tiny

  • $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeColors,要求配置成一行。tiny 小巧风 支持以下配置项:

tiny 颜色配置项和默认值:

json { "help_tips": "faint", "shortcuts": "faint", "label_icon": "blue", "label_text": "default", "cursor_icon": "green|bold", "active_selected": "green|bold", "active_alias": "cyan|bold", "active_host": "magenta|bold", "active_group": "blue|bold", "inactive_selected": "green|bold", "inactive_alias": "cyan", "inactive_host": "magenta", "inactive_group": "blue", "details_title": "default", "details_name": "faint", "details_value": "default" }

tiny 支持的颜色枚举,可用 | 连接多个:

default black red green yellow blue magenta cyan white bgBlack bgRed bgGreen bgYellow bgBlue bgMagenta bgCyan bgWhite bold faint italic underline

simple 简约风

  • $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeLayout = simple 选用 simple 简约风tssh simple

  • simple 简约风 支持的颜色配置项、默认值和颜色枚举,和 tiny 小巧风 完全相同,请参考前文。

table 表格风

  • $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeLayout = table 选用 table 表格风tssh table

  • $XDG_CONFIG_HOME/tssh/tssh.conf ( 或 ~/.tssh.conf ) 中配置 PromptThemeColors,要求配置成一行。table 表格风 支持以下配置项:

table 颜色配置项和默认值:

json { "help_tips": "faint", "shortcuts": "faint", "table_header": "10", "default_alias": "6", "default_host": "5", "default_group": "4", "selected_icon": "2", "selected_alias": "14", "selected_host": "13", "selected_group": "12", "default_border": "8", "selected_border": "10", "details_name": "4", "details_value": "3", "details_border": "8" }

  • 支持的颜色枚举请参考 lipgloss,除了 help_tipsshortcuts 与前文 tiny 小巧风 相同。

支持 trzsz

  • 在服务器上要安装 trzsz,才能使用 trz / tsz 上传和下载,可任选其一安装:Go 版( ⭐ 推荐 )、Py 版Js 版

  • ~/.ssh/configExConfigPath 配置文件中,配置 EnableDragFileYes 启用拖拽上传功能。

Host * # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh EnableDragFile Yes

  • 如果想在拖拽上传时覆盖现有文件,请将 DragFileUploadCommand 配置为 trz -y

Host xxx # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh DragFileUploadCommand trz -y

  • 如果只是想临时启用拖拽上传功能,可以在命令行中使用 tssh --dragfile 登录服务器。

  • ~/.ssh/configExConfigPath 配置文件中,配置 EnableTrzszNo 禁用 trzsz 和 zmodem。

Host no_trzsz_nor_zmodem # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh EnableTrzsz No

  • 可使用 --upload-file 参数在命令行中指定文件或目录直接上传,也可在服务器后面指定 trz 上传命令参数和保存路径,如:

sh tssh --upload-file /path/to/file1 --upload-file /path/to/dir2 xxx_server '~/.local/bin/trz -d /tmp/'

  • 可在命令行中使用 tsz 直接下载文件或目录到本地,可一并使用 --download-path 参数指定本地保存的路径,如:

sh tssh -t --client --download-path /tmp/ xxx_server 'tsz -d /path/to/file1 /path/to/dir2'

tssh trzsz

支持 zmodem

  • ~/.ssh/configExConfigPath 配置文件中,配置 EnableZmodemYes 启用 rz / sz 功能。

Host * # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh EnableZmodem Yes

  • 如果想在拖拽文件时使用 rz 上传,请将 DragFileUploadCommand 配置为 rz

Host xxx # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh EnableDragFile Yes DragFileUploadCommand rz

  • 除了服务器,本地电脑也要安装 lrzsz,Windows 可以从 lrzsz-win32 下载,解压并加到 PATH 环境变量中,也可以如下安装:

scoop install lrzsz / choco install lrzsz / winget install lrzsz

  • 如果只是想临时启用 rz / sz 传文件功能,可以在命令行中使用 tssh --zmodem 登录服务器。

  • 关于 rz / sz 进度条,己传大小和传输速度会有一点偏差,它的主要作用只是指示传输正在进行中。

  • 可使用 --upload-file 参数在命令行中指定文件直接上传,在服务器后面 cd 到保存路径再指定 rz 命令及参数即可,如:

sh tssh --upload-file /path/to/file1 --upload-file /path/to/file2 xxx_server 'cd /tmp/ && rz -yeb'

  • 可在命令行中使用 sz 直接下载文件到本地,可一并使用 --download-path 参数指定本地保存的路径,如:

sh tssh -t --client --zmodem --download-path /tmp/ xxx_server 'sz /path/to/file1 /path/to/file2'

支持 scp sftp

  • 使用了 tssh 记住密码的功能,登录时不用手工输入密码了,scpsftp 也一样可以不用手工输入密码。

  • 使用了 tssh 的 UDP 模式,SSH 通讯走加密的 UDP 通道了,scpsftp 也一样可以走加密的 UDP 通道。

  • 只要 scpsftp 使用 -S 选项指定 tssh,或者配置个 alias 即可使用 tssh 提供的一些功能,如:

sh sftp -S tssh xxx scp -S tssh xxx @xxx:/tmp/ alias tscp='scp -S tssh' alias tsftp='sftp -S tssh'

批量登录

  • 支持在 iTerm2( 要开启 Python API,但不需要Allow all apps to connect ),tmuxWindows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。

  • 按下 SpaceCtrl+X 等可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux

  • 按下 aCtrl+A 全选当前页所有机器,oCtrl+O 反选当前页所有机器,dl 翻到下一页。

  • 按下 pCtrl+P 以分屏的方式登录,wCtrl+W 以新窗口登录,tCtrl+T 以新 tab 登录。

  • tssh 不带参数启动可以批量登录服务器,若带 -o RemoteCommand 参数启动则可以批量执行指定的命令。支持执行指定命令之后进入交互式 shell,但 Windows Terminal 不支持分号 ;,可以用 |cat&& 代替。举例:

sh tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash -l' tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash -l"

tssh batch

分组标签

  • 如果服务器数量很多,分组标签 GroupLabels 可以在按 / 搜索时,快速找到目标服务器。

  • / 输入分组标签后,回车可以锁定;再按 / 可以输入另一个分组标签,回车再次锁定。

  • 在非搜索模式下,按 E 可以清空当前搜索标签;在搜索模式下按 Ctrl + E 也是同样效果。

  • 支持在一个 GroupLabels 中以空格分隔,配置多个分组标签;支持配置多个 GroupLabels

  • 支持以通配符 * 的形式,在多个 Host 节点配置分组标签,tssh 会将所有的标签汇总起来。

# 以下 testAA 具有标签 group1 group2 label3 label4 group5,可以加上 `#!!` 前缀,以兼容标准 ssh Host test* #!! GroupLabels group1 group2 #!! GroupLabels label3 Host testAA #!! GroupLabels label4 group5

自动交互

  • 支持类似 expect 的自动交互功能,在登录服务器之后,自动匹配服务器的输出,然后自动输入。

Host auto #!! ExpectCount 2 # 配置自动交互的次数,默认是 0 即无自动交互 #!! ExpectTimeout 30 # 配置自动交互的超时时间(单位:秒),默认是 30 秒 #!! ExpectPattern1 *assword # 配置第一个自动交互的匹配表达式 # 配置第一个自动输入(密文),这是由 tssh --enc-secret 编码得到的字符串,tssh 会自动发送 \r 回车 #!! ExpectSendPass1 d7983b4a8ac204bd073ed04741913befd4fbf813ad405d7404cb7d779536f8b87e71106d7780b2 #!! ExpectPattern2 hostname*$ # 配置第二个自动交互的匹配表达式 #!! ExpectSendText2 echo tssh expect\r # 配置第二个自动输入(明文),需要指定 \r 才会发送回车 # 以上 ExpectSendPass? 和 ExpectSendText? 只要二选一即可,若都配置则 ExpectSendPass? 的优先级更高

  • 在每个 ExpectPattern? 匹配之前,如果遇到可选的匹配则自动输入,用法如下:

``` Host case #!! ExpectCount 1 # 配置自动交互的次数,默认是 0 即无自动交互 #!! ExpectPattern1 hostname*$ # 配置第一个自动交互的匹配表达式 #!! ExpectSendText1 ssh xxx\r # 配置第一个自动输入,也可以换成 ExpectSendPass1 然后配置密文 #!! ExpectCaseSendText1 yes/no y\r # 在 ExpectPattern1 匹配之前,若遇到 yes/no 则

Extension points exported contracts — how you extend this code

Data (Interface)
Data is the interface that wraps the basic methods of a table model. [2 implementers]
internal/table/rows.go
SshClient (Interface)
SshClient implements a traditional SSH client that supports shells, subprocesses, TCP port/streamlocal forwarding and tu [1 …
tssh/ssh.go
StyleFunc (FuncType)
StyleFunc is the style function that determines the style of a Cell. It takes the row and column of the cell as an inpu
internal/table/table.go
SshSession (Interface)
SshSession represents a connection to a remote command or shell.
tssh/ssh.go
BorderStyleFunc (FuncType)
BorderStyleFunc is the style function that determines the style of a cell border.
internal/table/table.go

Core symbols most depended-on inside this repo

warning
called by 220
tssh/comm.go
debug
called by 190
tssh/comm.go
Close
called by 86
tssh/ssh.go
Render
called by 69
internal/table/table.go
String
called by 63
internal/table/table.go
getThemeColor
called by 46
tssh/config.go
String
called by 40
tssh/login.go
Write
called by 39
tssh/login.go

Shape

Function 414
Method 284
Struct 86
Interface 7
TypeAlias 4
FuncType 3

Languages

Go100%

Modules by API surface

tssh/ssh.go52 symbols
tssh/control.go44 symbols
tssh/tools.go39 symbols
tssh/login.go38 symbols
internal/table/table.go38 symbols
tssh/config.go33 symbols
internal/table/table_test.go29 symbols
tssh/prompt.go28 symbols
tssh/expect.go26 symbols
tssh/term_windows.go24 symbols
tssh/keys.go24 symbols
tssh/udp.go22 symbols

Dependencies from manifests, versioned

charm.land/bubbles/v2v2.1.0 · 1×
charm.land/bubbletea/v2v2.0.6 · 1×
charm.land/lipgloss/v2v2.0.3 · 1×
github.com/Microsoft/go-winiov0.6.2 · 1×
github.com/UserExistsError/conptyv0.1.4 · 1×
github.com/akavel/rsrcv0.10.2 · 1×
github.com/alexflint/go-scalarv1.2.0 · 1×
github.com/andybrewer/mackv0.0.0-2025102400113 · 1×
github.com/atotto/clipboardv0.1.4 · 1×
github.com/boombuler/barcodev1.1.0 · 1×
github.com/charmbracelet/colorprofilev0.4.3 · 1×
github.com/charmbracelet/ultravioletv0.0.0-2026042815372 · 1×

For agents

$ claude mcp add trzsz-ssh \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact