支持 trzsz 的 ssh 客戶端,支持搜索和服務器批量登錄,支持記住密碼

trzsz-ssh ( tssh ) 設計為 ssh 客戶端的直接替代品,提供與 openssh 完全兼容的基礎功能,同時實現其他有用的擴展功能。

GitHub: https://github.com/trzsz/trzsz-ssh

為什么做

  • 服務器太多,記不住所有別名,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
    
  • MacOS 可用 homebrew 安裝

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

    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 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 安裝

    • 國內推薦使用 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 -Syu
    yay -S tssh
    
  • 用 Go 直接安裝( 要求 go 1.21 以上 )

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

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

  • 用 Go 自己編譯( 要求 go 1.21 以上 )

    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.gif

  • ~/.tssh.conf 中配置 PromptThemeColors,要求配置成一行。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"
    }
    
    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.gif

  • simple 簡約風 支持的顏色配置項、默認值和顏色枚舉,和 tiny 小巧風 完全相同,請參考前文。

table 表格風

  • ~/.tssh.conf 中配置 PromptThemeLayout = table 選用 table 表格風

    tssh_table.gif

  • ~/.tssh.conf 中配置 PromptThemeColors,要求配置成一行。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.gif

支持 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.gif

分組標簽

  • 如果服務器數量很多,分組標簽 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 設置的標題。

UDP 模式

  • 在服務器上安裝 tsshd,使用 tssh --udp xxx 登錄服務器,或者如下配置以省略 --udp 參數:

    Host xxx
        #!! UdpMode yes
        #!! TsshdPath ~/go/bin/tsshd
    
  • tssh 在客戶端扮演 ssh 的角色,tsshd 在服務端扮演 sshd 的角色。

  • tssh 會先作為一個 ssh 客戶端正常登錄到服務器上,然后在服務器上啟動一個新的 tsshd 進程。

  • tsshd 進程會隨機偵聽一個 61000 到 62000 之間的 UDP 端口,并將其端口和密鑰通過 ssh 通道發回給 tssh 進程。登錄的 ssh 連接會被關閉,然后 tssh 進程通過 UDP 與 tsshd 進程通訊。

  • tsshd 支持 QUIC 協議和 KCP 協議(默認是 QUIC 協議),可以命令行指定(如 -oUdpMode=KCP),或如下配置:

    Host xxx
        #!! UdpMode KCP
    

故障排除

  • 在 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 則會認為它是有效配置之一。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容