安装配置tssh

安装tssh

1
2
3
4
5
6
7
8
9
10
11
# Windows
winget install tssh

# Ubuntu
sudo apt install tssh

# rpm
yum install tssh

# mac
brew install trzsz-ssh

个性配置文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# SSH 配置路径,默认为 ~/.ssh/config
ConfigPath = ~/.ssh/config

# 扩展配置路径,默认为 ~/.ssh/password
ExConfigPath = ~/.ssh/password

# trz 上传时,对话框打开的路径,为空时打开上次的路径, 默认为空
DefaultUploadPath = ~/Downloads

# tsz 下载时,自动保存的路径,为空时弹出对话框手工选择,默认为空
DefaultDownloadPath = ~/Downloads

# tssh 搜索和选择服务器时,配置主题风格和自定义颜色{table | thiny | simple}
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

指定自定义的主机配置文件

1
tssh -F S:\BaiduSyncdisk\tssh_conf\hosts

分组标签

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

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

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

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

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

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

记住密码

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 如果配置在 ~/.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 前缀即可,如:

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 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,请参考下文记住答案

其他功能

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

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

    • 上文说的记住密码记住答案等,在配置项前面加上 enc 则可以配置成密文,防止被人窥屏。

    • 如果密码中含有 # 等特殊字符,直接配置密码明文可能会导致登录失败,此时则必须使用密文配置。

      1
      2
      3
      4
      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)配置:

    1
    2
    3
    4
    5
    # 设置固定的服务器标题
    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 设置的标题。