6 Star 79 Fork 12

trzsz / tssh

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

trzsz-ssh ( tssh ) - 支持 trzsz ( trz / tsz ) 的 ssh 客户端

MIT License GitHub Release WebSite 中文文档

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

为什么做

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

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

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

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

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

安装方法

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

  • Windows 可用 scoop / winget / choco 安装

    scoop install tssh / winget install tssh / choco install tssh
    scoop install tssh
    winget install tssh
    choco install tssh
  • MacOS 可用 homebrew 安装

    brew install trzsz-ssh
    brew update
    brew install trzsz-ssh
  • Ubuntu 可用 apt 安装

    sudo apt install tssh
    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
    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 源不是必须的 ):

      curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash
      
      sudo yum install tssh
    • 也可使用 gemfury 源( 只要网络通,所有操作系统通用 )

      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
    yay -Syu
    yay -S tssh
  • 用 Go 直接安装( 要求 go 1.20 以上 )

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

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

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

    sudo make install
    git clone --depth 1 https://github.com/trzsz/trzsz-ssh.git
    cd trzsz-ssh
    make
    sudo make install
  • 可从 GitHub Releases 中下载,国内可从 Gitee 发行版 中下载,解压并加到 PATH 环境变量中。

登录界面

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

  • 关于如何配置 ~/.ssh/config,请参考 openssh ( 暂不支持 Match ),或参考 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 支持多种主题风格,在 ~/.tssh.conf 中配置 PromptThemeLayout 选用。欢迎一起来创造更多更好看的。

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

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

tiny 小巧风

  • ~/.tssh.conf 中配置 PromptThemeLayout = tiny 选用 tiny 小巧风tssh tiny

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

    tiny 颜色配置项和默认值:
    {
      "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 简约风

  • ~/.tssh.conf 中配置 PromptThemeLayout = simple 选用 simple 简约风tssh simple

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

table 表格风

  • ~/.tssh.conf 中配置 PromptThemeLayout = table 选用 table 表格风tssh table

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

    table 颜色配置项和默认值:
    {
      "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
  • 如果只是想临时启用拖拽上传功能,可以在命令行中使用 tssh --dragfile 登录服务器。

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

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

tssh trzsz

支持 zmodem

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

    Host *
      # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh
      EnableZmodem Yes
  • 除了服务器,本地电脑也要安装 lrzsz,Windows 可以从 lrzsz-win32 下载,解压并加到 PATH 环境变量中,也可以如下安装:

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

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

批量登录

  • 支持在 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&& 代替。举例:

    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 则发送 y 并回车
        #!! ExpectCaseSendText1 y/n yes\r   # 在 ExpectPattern1 匹配之前,若遇到 y/n 则发送 yes 并回车
        #!! ExpectCaseSendPass1 token d7... # 在 ExpectPattern1 匹配之前,若遇到 token 则解码 d7... 并发送
  • 在匹配到指定输出时,自动生成 totp 2FA 双因子验证码,然后自动输入,用法如下:

    Host totp
        #!! ExpectCount 2  # 配置自动交互的次数,默认是 0 即无自动交互
        #!! ExpectPattern1 token:  # 配置第一个自动交互的匹配表达式
        #!! ExpectSendTotp1 xxxxx  # 配置 totp 的 secret(明文),一般可通过扫二维码获得
        #!! ExpectPattern2 token:  # 配置第二个自动交互的匹配表达式
        # 下面是运行 tssh --enc-secret 输入 totp 的 secret 得到的密文串
        #!! ExpectSendEncTotp2 821fe830270201c36cd1a869876a24453014ac2f1d2d3b056f3601ce9cc9a87023
  • 在匹配到指定输出时,执行指定的命令获取动态密码,然后自动输入,用法如下:

    Host otp
        #!! ExpectCount 2  # 配置自动交互的次数,默认是 0 即无自动交互
        #!! ExpectPattern1 token:  # 配置第一个自动交互的匹配表达式
        #!! ExpectSendOtp1 oathtool --totp -b xxxxx  # 配置获取动态密码的命令(明文)
        #!! ExpectPattern2 token:  # 配置第二个自动交互的匹配表达式
        # 下面是运行 tssh --enc-secret 输入命令 oathtool --totp -b xxxxx 得到的密文串
        #!! ExpectSendEncOtp2 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
  • 可能有些服务器不支持连着发送数据,如输入 1\r,要求在 1 之后有一点延迟,然后再 \r 回车,则可以用 \| 间开。

    Host sleep
        #!! ExpectCount 2  # 配置自动交互的次数,默认是 0 即无自动交互
        #!! ExpectSleepMS 100  # 当要间开输入时,sleep 的毫秒数,默认 100ms
        #!! ExpectPattern1 x>  # 配置第一个自动交互的匹配表达式
        #!! ExpectSendText1 1\|\r  # 配置第一个自动输入,在发送 1 之后,先 sleep 100ms,再发送 \r 回车
        #!! ExpectPattern2 y>  # 配置第二个自动交互的匹配表达式
        #!! ExpectSendText2 \|1\|\|\r  # 先 sleep 100ms,然后发送 1,再 sleep 200ms,最后发送 \r 回车
  • 有些服务器连密码也不支持连着发送,则需要配置 ExpectPassSleep,默认为 no,可配置为 eachenter

    • 配置 ExpectPassSleep each 则每输入一个字符就 sleep 一小段时间,默认 100 毫秒,可配置 ExpectSleepMS 进行调整。
    • 配置 ExpectPassSleep enter 则只是在发送 \r 回车之前 sleep 一小段时间,默认 100 毫秒,可配置 ExpectSleepMS 进行调整。
  • 如果不知道 ExpectPattern2 如何配置,可以先将 ExpectCount 配置为 2,然后使用 tssh --debug 登录,就会看到 expect 捕获到的输出,可以直接复制输出的最后部分来配置 ExpectPattern2。把 2 换成其他任意的数字也适用。

记住密码

  • 推荐使用公钥认证登录,可参考 openssh 的文档,或者参考 tssh wiki 公钥认证登录

  • 如果只能使用密码登录,建议至少设置一下配置文件的权限,如:

    chmod 700 ~/.ssh && chmod 600 ~/.ssh/password ~/.ssh/config
  • 下面配置 test1test2 的密码是 123456,其他以 test 开头的密码是 111111

    # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh
    Host test1
        # 下面是运行 tssh --enc-secret 输入密码 123456 得到的密文串,每次运行结果不同。
        #!! encPassword 756b17766f45bdc44c37f811db9990b0880318d5f00f6531b15e068ef1fde2666550
    
    # 如果配置在 ~/.ssh/password 中,则不需要考虑是否兼容标准 ssh
    Host test2
        # 下面是运行 tssh --enc-secret 输入密码 123456 得到的密文串,每次运行结果不同。
        encPassword 051a2f0fdc7d0d40794b845967df4c2d05b5eb0f25339021dc4e02a9d7620070654b
    
    # ~/.ssh/config 和 ~/.ssh/password 是支持通配符的,tssh 会使用第一个匹配到的值。
    # 这里希望 test2 使用区别于其他 test* 的密码,所以将 test* 放在了 test2 的后面。
    
    Host test*
        Password 111111  # 支持明文密码,但是推荐使用 tssh --enc-secret 简单加密一下。
  • 如果启用了 ControlMaster 多路复用,或者是在 Warp 终端,需要使用前面 自动交互 的方式实现记住密码的效果。配置方式请参考前面 自动交互,加上 Ctrl 前缀即可,如:

    Host ctrl
        #!! CtrlExpectCount 1  # 配置自动交互的次数,一般只要输入一次密码
        #!! CtrlExpectPattern1 *assword    # 配置密码提示语的匹配表达式
        #!! CtrlExpectSendPass1 d7983b...  # 配置 tssh --enc-secret 编码后的密码
  • 支持记住私钥的Passphrase( 推荐使用 ssh-agent )。支持与 IdentityFile 一起配置, 支持使用私钥文件名代替 Host 别名设置通用密钥的 Passphrase。举例:

    # IdentityFile 和 Passphrase 一起配置,可以加上 `#!!` 前缀,以兼容标准 ssh
    Host test1
        IdentityFile /path/to/id_rsa
        # 下面是运行 tssh --enc-secret 输入密码 123456 得到的密文串,每次运行结果不同。
        #!! encPassphrase 6f419911555b0cdc84549ae791ef69f654118d734bb4351de7e83163726ef46d176a
    
    # 在 ~/.ssh/config 中配置通用私钥 ~/.ssh/id_ed25519 对应的 Passphrase
    # 可以加上通配符 * 以避免 tssh 搜索和选择时,文件名出现在服务器列表中。
    Host id_ed25519*
        # 下面是运行 tssh --enc-secret 输入密码 111111 得到的密文串,每次运行结果不同。
        #!! encPassphrase 3a929328f2ab1be0ba3fccf29e8125f8e2dac6dab73c946605cf0bb8060b05f02a68
    
    # 在 ~/.ssh/password 中配置则不需要通配符*,也不会出现在服务器列表中。
    Host id_rsa
        Passphrase 111111  # 支持明文密码,但是推荐使用 tssh --enc-secret 简单加密一下。
  • 记住密码之后还提示输入密码?可能服务器的认证方式是 keyboard interactive,请参考下文记住答案

记住答案

  • 除了私钥和密码,还有一种登录方式,英文叫 keyboard interactive ,是服务器返回一些问题,客户端提供正确的答案就能登录,很多自定义的一次性密码就是利用这种方式实现的。

  • 对于只有一个问题,且答案(密码)固定不变的,只要配置 QuestionAnswer1 即可。对于有多个问题的,可以按问题的序号进行配置,也可以按问题的 hex 编码进行配置。

  • 使用 tssh --debug 登录,会输出问题的 hex 编码,从而知道该如何使用 hex 编码进行配置。配置举例:

    # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh
    Host test1
        # 下面是运行 tssh --enc-secret 输入答案 `答案一` 得到的密文串,每次运行结果不同。
        encQuestionAnswer1 482de7690ccc5229299ccadd8de1cb7c6d842665f0dc92ff947a302f644817baecbab38601
    Host test2
        # 下面是运行 tssh --enc-secret 输入答案 `答案一` 得到的密文串,每次运行结果不同。
        encQuestionAnswer1 43e86f1140cf6d8c786248aad95a26f30633f1eab671676b0860ecb5b1a64fb3ec5212dddf
        QuestionAnswer2 答案二  # 支持明文答案,但是推荐使用 tssh --enc-secret 简单加密一下。
        QuestionAnswer3 答案三
    Host test3
        # 其中 `6e616d653a20` 是问题 `name: ` 的 hex 编码,`enc` 前缀代表配置的是密文串。
        # 下面是运行 tssh --enc-secret 输入答案 `my_name` 得到的密文串,每次运行结果不同。
        enc6e616d653a20 775f2523ab747384e1661aba7779011cb754b73f2e947672c7fd109607b801d70902d1
        636f64653a20 my_code  # 其中 `636f64653a20` 是问题 `code: ` 的 hex 编码, `my_code` 是明文答案
  • 对于 totp 2FA 双因子验证码,则可以如下配置(同样支持按序号或 hex 编码进行配置):

    Host totp
        TotpSecret1 xxxxx  # 按序号配置 totp 的 secret(明文),一般可通过扫二维码获得
        totp636f64653a20 xxxxx  # 按 `code: ` 的 hex 编码 `636f64653a20` 配置 totp 的 secret(明文)
        # 下面是运行 tssh --enc-secret 输入命令 xxxxx 得到的密文串,加上 `enc` 前缀进行配置
        encTotpSecret2 8ba828bd54ff694bc8c4619f802b5bed73232e60a680bbac05ba5626269a81a00b
        enctotp636f64653a20 8ba828bd54ff694bc8c4619f802b5bed73232e60a680bbac05ba5626269a81a00b
  • 对于可以通过命令行获取到的动态密码,则可以如下配置(同样支持按序号或 hex 编码进行配置):

    Host otp
        OtpCommand1 oathtool --totp -b xxxxx  # 按序号配置获取动态密码的命令
        otp636f64653a20 oathtool --totp -b xxxxx  # 按 `code: ` 的 hex 编码 `636f64653a20` 配置获取动态密码的命令
        # 下面是运行 tssh --enc-secret 输入命令 oathtool --totp -b xxxxx 得到的密文串,加上 `enc` 前缀进行配置
        encOtpCommand2 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
        encotp636f64653a20 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
  • 如果启用了 ControlMaster 多路复用,或者是在 Warp 终端,请参考前面 自动交互Ctrl 前缀来实现。

    Host ctrl_totp
        #!! CtrlExpectCount 1  # 配置自动交互的次数
        #!! CtrlExpectPattern1 code:  # 配置密码提示语的匹配表达式(这里以 2FA 验证码举例)
        #!! CtrlExpectSendTotp1 xxxxx  # 配置 totp 的 secret(明文),一般可通过扫二维码获得
        #!! CtrlExpectSendEncTotp1 622ada31cf...  # 或者配置 tssh --enc-secret 得到的密文串
    
    Host ctrl_otp
        #!! CtrlExpectCount 1  # 配置自动交互的次数
        #!! CtrlExpectPattern1 token:  # 配置密码提示语的匹配表达式(这里以动态密码举例)
        #!! CtrlExpectSendOtp1 oathtool --totp -b xxxxx  # 配置获取动态密码的命令(明文)
        #!! CtrlExpectSendEncOtp1 77b4ce85d0...  # 或者配置 tssh --enc-secret 得到的密文串

个性配置

  • 支持在 ~/.tssh.conf( Windows 是 C:\Users\your_name\.tssh.conf )中进行以下自定义配置:

    # SSH 配置路径,默认为 ~/.ssh/config
    ConfigPath = ~/.ssh/config
    
    # 扩展配置路径,默认为 ~/.ssh/password
    ExConfigPath = ~/.ssh/password
    
    # trz 上传时,对话框打开的路径,为空时打开上次的路径, 默认为空
    DefaultUploadPath = ~/Downloads
    
    # tsz 下载时,自动保存的路径,为空时弹出对话框手工选择,默认为空
    DefaultDownloadPath = ~/Downloads
    
    # tssh 搜索和选择服务器时,配置主题风格和自定义颜色
    PromptThemeLayout = simple
    PromptThemeColors = {"active_host": "magenta|bold", "inactive_host": "magenta"}
    
    # tssh 搜索和选择服务器时,每页显示的记录数,默认为 10
    PromptPageSize = 10
    
    # tssh 搜索和选择服务器时,默认是类似 vim 的 normal 模式,想默认进入搜索模式可如下配置:
    PromptDefaultMode = search
    
    # tssh 搜索和选择服务器时,详情中显示的配置列表,默认如下:
    PromptDetailItems = Alias Host Port User GroupLabels IdentityFile ProxyCommand ProxyJump RemoteCommand
    
    # tssh 搜索和选择服务器时,可以自定义光标和选中的图标:
    PromptCursorIcon = 🧨
    PromptSelectedIcon = 🍺
    
    # 登录后自动设置终端标题,退出后不会重置,你需要参考下文在本地 shell 中设置 PROMPT_COMMAND
    SetTerminalTitle = Yes

配置注释

  • tssh 配置中的注释基本与 openssh 一致,额外做了一些扩展支持,详见下表:

    注释 openssh tssh
    # 开头的配置行 是注释 是注释
    #!! 开头的配置行 是注释 非注释
    Key Value # Comment 看情况 是注释
    Key=Value # Comment 看情况 非注释
  • # 开头的配置行,openssh 一律认为是注释;tssh 认为 #!! 开头的配置行不是注释,其他以 # 开头的配置行是注释。

  • Key Value # Comment 配置(没有 = 号),openssh 有些情况认为 # 后的内容是注释,有些情况认为不是注释;tssh 一律认为 # 后的内容是注释。

  • Key=Value # Comment 配置(有 = 号),openssh 有些情况认为 # 后的内容是注释,有些情况认为不是注释;tssh 一律认为 # 后的内容不是注释。

其他功能

  • 使用 -f 后台运行时,可以加上 --reconnect 参数,在后台进程因连接断开等而退出时,会自动重新连接。

  • 运行 tssh --enc-secret,输入密码或答案,可得到用于配置的密文( 相同密码每次运行结果不同 )。

    • 上文说的记住密码记住答案等,在配置项前面加上 enc 则可以配置成密文,防止被人窥屏。
    • 如果密码中含有 # 等特殊字符,直接配置密码明文可能会导致登录失败,此时则必须使用密文配置。
    Host server2
      # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前缀,以兼容标准 ssh
      encPassword de88c4dbdc95d85303682734e2397c4d8dd29bfff09ec53580f31dd40291fc8c7755
      encQuestionAnswer1 93956f6e7e9f2aef3af7d6a61f7046dddf14aa4bbd9845dbb836fe3782b62ac0d89f
  • 运行 tssh --new-host 可以在 TUI 界面轻松添加 SSH 配置,并且完成后可以立即登录。

  • 运行 tssh --install-trzsz 可以将 trzsz ( trz / tsz ) 安装到服务器上。

    • 默认安装到 ~/.local/bin/ 目录,可以通过 --install-path /path/to/install 指定安装目录。
    • --install-path 安装目录含有 ~/,则必须加上单引号,如--install-path '~/path'
    • 若获取 trzsz 的最新版本号失败,可以通过 --trzsz-version x.x.x 参数自行指定。
    • 若下载 trzsz 的安装包失败,可以自行下载并通过 --trzsz-bin-path /path/to/trzsz.tar.gz 参数指定。
    • 注意:--install-trzsz 不支持 Windows 服务器,不支持跳板机( 除非以 ProxyJump 跳过 )。
  • 关于修改终端标题,其实无需 tssh 就能实现,只要在服务器的 shell 配置文件中(如~/.bashrc)配置:

    # 设置固定的服务器标题
    PROMPT_COMMAND='echo -ne "\033]0;固定的服务器标题\007"'
    
    # 根据环境变量动态变化的标题
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    • 如果在 ~/.tssh.conf 中设置了 SetTerminalTitle = Yes,则会在登录后自动设置终端标题,但是服务器上的 PROMPT_COMMAND 会覆盖 tssh 设置的标题。
    • tssh 退出后不会重置为原来的标题,你需要在本地 shell 中设置 PROMPT_COMMAND,让它覆盖 tssh 设置的标题。

故障排除

  • 在 Warp 终端,分块 Blocks 的功能需要将 tssh 重命名为 ssh,推荐建个软链接( 对更新友好 ):

    sudo ln -sv $(which tssh) /usr/local/bin/ssh
    • 软链后,ssh -V 应输出 trzsz ssh 加版本号,如果不是,说明软链不成功,或者在 PATHopenssh 的优先级更高,你要软链到另一个地方或者调整 PATH 的优先级。

    • 软链后,要直接使用 ssh,它等价于 tssh。如果还是用 tssh 是不会支持分块 Blocks 功能的。

    • --dragfile 参数可能会让 Warp 分块功能失效,请参考前文配置 EnableDragFile 来启用拖拽功能。

    • 拖拽文件或目录进入 Warp 终端后,可能不会立即触发上传,需要多按一次回车键,才会上传。

  • 如果你在使用 Windows7 或者旧版本的 Windows10 等,遇到 enable virtual terminal failed 的错误。

  • 如果在 ~/.ssh/config 中配置了 tssh 特有的配置项后,标准 ssh 报错 Bad configuration option

    • 可以在出错配置项中加上前缀 #!!,标准 ssh 会将它当作注释,而 tssh 则会认为它是有效配置之一。

联系方式

有什么问题可以发邮件给作者 lonnywong@qq.com,也可以提 Issues 。欢迎加入 QQ 群:318578930。

赞助打赏

❤️ 赞助 trzsz ❤️,请作者喝杯咖啡 ☕ ? 谢谢您们的支持!

MIT License Copyright (c) 2023-2024 The Trzsz SSH Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

trzsz-ssh ( tssh ) 设计为 ssh 客户端的直接替代品,提供与 openssh 完全兼容的基础功能,同时实现其他有用的扩展功能。 展开 收起
Go 等 2 种语言
MIT
取消

发行版 (18)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/trzsz/tssh.git
git@gitee.com:trzsz/tssh.git
trzsz
tssh
tssh
main

搜索帮助