支持 trzsz 的 ssh 客戶端,支持搜索和服務(wù)器批量登錄卜高,支持記住密碼

trzsz-ssh ( tssh ) 設(shè)計為 ssh 客戶端的直接替代品弥姻,提供與 openssh 完全兼容的基礎(chǔ)功能,同時實現(xiàn)其他有用的擴展功能掺涛。

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

為什么做

  • 服務(wù)器太多庭敦,記不住所有別名,tssh 內(nèi)置登錄界面薪缆,支持搜索和選擇服務(wù)器登錄秧廉。

  • tssh 登錄服務(wù)器后,內(nèi)置支持 trzsz ( trz / tsz ) 工具拣帽,傳文件無需另外新開窗口疼电。

  • 有時需要同時登錄一批機器,tssh 支持多選并批量登錄减拭,同時支持執(zhí)行預(yù)設(shè)的命令蔽豺。

  • 有些服務(wù)器不支持公鑰登錄,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 安裝

    • 國內(nèi)推薦使用 wlnmp 源宴杀,安裝 tssh 只需要添加 wlnmp 源( 配置 epel 源不是必須的 ):

      curl -fsSL "https://sh.wlnmp.com/wlnmp.sh" | bash
      
      sudo yum install tssh
      
    • 也可使用 gemfury 源( 只要網(wǎng)絡(luò)通,所有操作系統(tǒng)通用 )

      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 中下載,國內(nèi)可從 Gitee 發(fā)行版 中下載盾致,解壓并加到 PATH 環(huán)境變量中主经。

登錄界面

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

  • 關(guān)于如何配置 ~/.ssh/config罩驻,請參考 openssh ( 暫不支持 Match ),或參考 tssh wiki SSH基本配置护赊。

  • 直接無參數(shù)運行 tssh 命令就會打開登錄界面惠遏,或者有除目標(biāo)機器外的其他參數(shù)也會打開登錄界面。

  • 如果目標(biāo)機器參數(shù)是 ~/.ssh/config 中別名的一部分骏啰,不能完全匹配某個別名节吮,也會打開登錄界面。

  • 如果配置了 #!! HideHost yes判耕,或者別名中含有 *? 通配符時透绩,則不會顯示在登錄界面中。

  • tssh 支持很多快捷鍵壁熄,支持搜索帚豪,在 tmuxiTerm2Windows Terminal 等中使用時支持多選草丧。

    操作 全局快捷鍵 非搜索快捷鍵 快捷鍵描述
    Confirm Enter 確認(rèn)并登錄
    Quit/Exit Ctrl+C Ctrl+Q q Q 取消并退出
    Move Prev Ctrl+K Shift+Tab ↑ k K 往上移光標(biāo)
    Move Next Ctrl+J Tab ↓ j J 往下移光標(biāo)
    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 擦除搜索關(guān)鍵字
    TglSearch / 切換搜索功能
    Tgl Help ? 切換幫助信息
    TglSelect Ctrl+X Ctrl+Space Alt+Space Space x X 切換選中狀態(tài)
    SelectAll Ctrl+A a A 全選當(dāng)前頁
    SelectOpp Ctrl+O o O 反選當(dāng)前頁
    Open Wins Ctrl+W w W 新窗口批量登錄
    Open Tabs Ctrl+T t T 新 Tab 批量登錄
    Open Pane Ctrl+P p P 分屏批量登錄

主題風(fēng)格

  • tssh 支持多種主題風(fēng)格狸臣,在 ~/.tssh.conf 中配置 PromptThemeLayout 選用。歡迎一起來創(chuàng)造更多更好看的昌执。

  • 每種主題風(fēng)格都支持自定義顏色烛亦,在 ~/.tssh.conf 中配置 PromptThemeColors,只要配置非默認(rèn)的顏色即可懂拾。

  • 請為你喜歡的主題風(fēng)格??投票??煤禽,得票數(shù)最高的主題風(fēng)格將會在下個版本被設(shè)置為默認(rèn)主題。

tiny 小巧風(fēng)

  • ~/.tssh.conf 中配置 PromptThemeLayout = tiny 選用 tiny 小巧風(fēng)岖赋。

    tssh_tiny.gif

  • ~/.tssh.conf 中配置 PromptThemeColors呜师,要求配置成一行。tiny 小巧風(fēng) 支持以下配置項:

    {
      "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 簡約風(fēng)

  • ~/.tssh.conf 中配置 PromptThemeLayout = simple 選用 simple 簡約風(fēng)贾节。

    tssh_simple.gif

  • simple 簡約風(fēng) 支持的顏色配置項汁汗、默認(rèn)值和顏色枚舉衷畦,和 tiny 小巧風(fēng) 完全相同,請參考前文知牌。

table 表格風(fēng)

  • ~/.tssh.conf 中配置 PromptThemeLayout = table 選用 table 表格風(fēng)祈争。

    tssh_table.gif

  • ~/.tssh.conf 中配置 PromptThemeColors,要求配置成一行角寸。table 表格風(fēng) 支持以下配置項:

    {
      "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 小巧風(fēng) 相同。

支持 trzsz

  • 在服務(wù)器上要安裝 trzsz扁藕,才能使用 trz / tsz 上傳和下載沮峡,可任選其一安裝:Go 版( ? 推薦 )、Py 版亿柑、Js 版邢疙。

  • ~/.ssh/configExConfigPath 配置文件中,配置 EnableDragFileYes 啟用拖拽上傳功能望薄。

    Host *
      # 如果配置在 ~/.ssh/config 中疟游,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh
      EnableDragFile Yes
    
  • 如果只是想臨時啟用拖拽上傳功能痕支,可以在命令行中使用 tssh --dragfile 登錄服務(wù)器颁虐。

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

    Host no_trzsz_nor_zmodem
      # 如果配置在 ~/.ssh/config 中另绩,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh
      EnableTrzsz No
    
tssh_trzsz.gif

支持 zmodem

  • ~/.ssh/configExConfigPath 配置文件中花嘶,配置 EnableZmodemYes 啟用 rz / sz 功能板熊。

    Host *
      # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前綴察绷,以兼容標(biāo)準(zhǔn) ssh
      EnableZmodem Yes
    
  • 除了服務(wù)器,本地電腦也要安裝 lrzsz津辩,Windows 可以從 lrzsz-win32 下載拆撼,解壓并加到 PATH 環(huán)境變量中,也可以如下安裝:

    scoop install lrzsz
    
    choco install lrzsz
    
  • 如果只是想臨時啟用 rz / sz 傳文件功能喘沿,可以在命令行中使用 tssh --zmodem 登錄服務(wù)器闸度。

  • 關(guān)于 rz / sz 進(jìn)度條,己傳大小和傳輸速度會有一點偏差蚜印,它的主要作用只是指示傳輸正在進(jìn)行中莺禁。

批量登錄

  • 支持在 iTerm2( 要開啟 Python API,但不需要Allow all apps to connect )窄赋,tmuxWindows Terminal 中一次選擇多臺服務(wù)器哟冬,批量登錄楼熄,并支持批量執(zhí)行預(yù)先指定的命令。

  • 按下 Space浩峡、Ctrl+X 等可以選中或取消當(dāng)前服務(wù)器可岂,若不能選中說明還不支持當(dāng)前終端,請先運行 tmux翰灾。

  • 按下 aCtrl+A 全選當(dāng)前頁所有機器缕粹,oCtrl+O 反選當(dāng)前頁所有機器,dl 翻到下一頁纸淮。

  • 按下 pCtrl+P 以分屏的方式登錄平斩,wCtrl+W 以新窗口登錄,tCtrl+T 以新 tab 登錄咽块。

  • tssh 不帶參數(shù)啟動可以批量登錄服務(wù)器绘面,若帶 -o RemoteCommand 參數(shù)啟動則可以批量執(zhí)行指定的命令。支持執(zhí)行指定命令之后進(jìn)入交互式 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

分組標(biāo)簽

  • 如果服務(wù)器數(shù)量很多峭竣,分組標(biāo)簽 GroupLabels 可以在按 / 搜索時塘辅,快速找到目標(biāo)服務(wù)器。

  • / 輸入分組標(biāo)簽后皆撩,回車可以鎖定扣墩;再按 / 可以輸入另一個分組標(biāo)簽,回車再次鎖定扛吞。

  • 在非搜索模式下呻惕,按 E 可以清空當(dāng)前搜索標(biāo)簽;在搜索模式下按 Ctrl + E 也是同樣效果滥比。

  • 支持在一個 GroupLabels 中以空格分隔亚脆,配置多個分組標(biāo)簽;支持配置多個 GroupLabels盲泛。

  • 支持以通配符 * 的形式濒持,在多個 Host 節(jié)點配置分組標(biāo)簽,tssh 會將所有的標(biāo)簽匯總起來寺滚。

    # 以下 testAA 具有標(biāo)簽 group1 group2 label3 label4 group5柑营,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh
    Host test*
        #!! GroupLabels group1 group2
        #!! GroupLabels label3
    Host testAA
        #!! GroupLabels label4 group5
    

自動交互

  • 支持類似 expect 的自動交互功能村视,在登錄服務(wù)器之后官套,自動匹配服務(wù)器的輸出,然后自動輸入。

    Host auto
        #!! ExpectCount 2  # 配置自動交互的次數(shù)奶赔,默認(rèn)是 0 即無自動交互
        #!! ExpectTimeout 30  # 配置自動交互的超時時間(單位:秒)惋嚎,默認(rèn)是 30 秒
        #!! ExpectPattern1 *assword  # 配置第一個自動交互的匹配表達(dá)式
        # 配置第一個自動輸入(密文),這是由 tssh --enc-secret 編碼得到的字符串纺阔,tssh 會自動發(fā)送 \r 回車
        #!! ExpectSendPass1 d7983b4a8ac204bd073ed04741913befd4fbf813ad405d7404cb7d779536f8b87e71106d7780b2
        #!! ExpectPattern2 hostname*$  # 配置第二個自動交互的匹配表達(dá)式
        #!! ExpectSendText2 echo tssh expect\r  # 配置第二個自動輸入(明文)瘸彤,需要指定 \r 才會發(fā)送回車
        # 以上 ExpectSendPass? 和 ExpectSendText? 只要二選一即可,若都配置則 ExpectSendPass? 的優(yōu)先級更高
    
  • 在每個 ExpectPattern? 匹配之前笛钝,如果遇到可選的匹配則自動輸入质况,用法如下:

    Host case
        #!! ExpectCount 1  # 配置自動交互的次數(shù),默認(rèn)是 0 即無自動交互
        #!! ExpectPattern1 hostname*$  # 配置第一個自動交互的匹配表達(dá)式
        #!! ExpectSendText1 ssh xxx\r  # 配置第一個自動輸入玻靡,也可以換成 ExpectSendPass1 然后配置密文
        #!! ExpectCaseSendText1 yes/no y\r  # 在 ExpectPattern1 匹配之前结榄,若遇到 yes/no 則發(fā)送 y 并回車
        #!! ExpectCaseSendText1 y/n yes\r   # 在 ExpectPattern1 匹配之前,若遇到 y/n 則發(fā)送 yes 并回車
        #!! ExpectCaseSendPass1 token d7... # 在 ExpectPattern1 匹配之前囤捻,若遇到 token 則解碼 d7... 并發(fā)送
    
  • 在匹配到指定輸出時臼朗,自動生成 totp 2FA 雙因子驗證碼,然后自動輸入蝎土,用法如下:

    Host totp
        #!! ExpectCount 2  # 配置自動交互的次數(shù)视哑,默認(rèn)是 0 即無自動交互
        #!! ExpectPattern1 token:  # 配置第一個自動交互的匹配表達(dá)式
        #!! ExpectSendTotp1 xxxxx  # 配置 totp 的 secret(明文),一般可通過掃二維碼獲得
        #!! ExpectPattern2 token:  # 配置第二個自動交互的匹配表達(dá)式
        # 下面是運行 tssh --enc-secret 輸入 totp 的 secret 得到的密文串
        #!! ExpectSendEncTotp2 821fe830270201c36cd1a869876a24453014ac2f1d2d3b056f3601ce9cc9a87023
    
  • 在匹配到指定輸出時誊涯,執(zhí)行指定的命令獲取動態(tài)密碼挡毅,然后自動輸入,用法如下:

    Host otp
        #!! ExpectCount 2  # 配置自動交互的次數(shù)暴构,默認(rèn)是 0 即無自動交互
        #!! ExpectPattern1 token:  # 配置第一個自動交互的匹配表達(dá)式
        #!! ExpectSendOtp1 oathtool --totp -b xxxxx  # 配置獲取動態(tài)密碼的命令(明文)
        #!! ExpectPattern2 token:  # 配置第二個自動交互的匹配表達(dá)式
        # 下面是運行 tssh --enc-secret 輸入命令 oathtool --totp -b xxxxx 得到的密文串
        #!! ExpectSendEncOtp2 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
    
  • 可能有些服務(wù)器不支持連著發(fā)送數(shù)據(jù)跪呈,如輸入 1\r,要求在 1 之后有一點延遲取逾,然后再 \r 回車耗绿,則可以用 \| 間開。

    Host sleep
        #!! ExpectCount 2  # 配置自動交互的次數(shù)砾隅,默認(rèn)是 0 即無自動交互
        #!! ExpectSleepMS 100  # 當(dāng)要間開輸入時误阻,sleep 的毫秒數(shù),默認(rèn) 100ms
        #!! ExpectPattern1 x>  # 配置第一個自動交互的匹配表達(dá)式
        #!! ExpectSendText1 1\|\r  # 配置第一個自動輸入晴埂,在發(fā)送 1 之后究反,先 sleep 100ms腊瑟,再發(fā)送 \r 回車
        #!! ExpectPattern2 y>  # 配置第二個自動交互的匹配表達(dá)式
        #!! ExpectSendText2 \|1\|\|\r  # 先 sleep 100ms,然后發(fā)送 1洛搀,再 sleep 200ms叹括,最后發(fā)送 \r 回車
    
  • 有些服務(wù)器連密碼也不支持連著發(fā)送,則需要配置 ExpectPassSleep尊勿,默認(rèn)為 no抹腿,可配置為 eachenter

    • 配置 ExpectPassSleep each 則每輸入一個字符就 sleep 一小段時間彤路,默認(rèn) 100 毫秒浅浮,可配置 ExpectSleepMS 進(jìn)行調(diào)整沫浆。
    • 配置 ExpectPassSleep enter 則只是在發(fā)送 \r 回車之前 sleep 一小段時間,默認(rèn) 100 毫秒滚秩,可配置 ExpectSleepMS 進(jìn)行調(diào)整专执。
  • 如果不知道 ExpectPattern2 如何配置,可以先將 ExpectCount 配置為 2郁油,然后使用 tssh --debug 登錄本股,就會看到 expect 捕獲到的輸出,可以直接復(fù)制輸出的最后部分來配置 ExpectPattern2桐腌。把 2 換成其他任意的數(shù)字也適用拄显。

記住密碼

  • 推薦使用公鑰認(rèn)證登錄,可參考 openssh 的文檔案站,或者參考 tssh wiki 公鑰認(rèn)證登錄躬审。

  • 如果只能使用密碼登錄,建議至少設(shè)置一下配置文件的權(quán)限蟆盐,如:

    chmod 700 ~/.ssh && chmod 600 ~/.ssh/password ~/.ssh/config
    
  • 下面配置 test1test2 的密碼是 123456承边,其他以 test 開頭的密碼是 111111

    # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前綴石挂,以兼容標(biāo)準(zhǔn) ssh
    Host test1
        # 下面是運行 tssh --enc-secret 輸入密碼 123456 得到的密文串博助,每次運行結(jié)果不同。
        #!! encPassword 756b17766f45bdc44c37f811db9990b0880318d5f00f6531b15e068ef1fde2666550
    
    # 如果配置在 ~/.ssh/password 中誊稚,則不需要考慮是否兼容標(biāo)準(zhǔn) ssh
    Host test2
        # 下面是運行 tssh --enc-secret 輸入密碼 123456 得到的密文串翔始,每次運行結(jié)果不同。
        encPassword 051a2f0fdc7d0d40794b845967df4c2d05b5eb0f25339021dc4e02a9d7620070654b
    
    # ~/.ssh/config 和 ~/.ssh/password 是支持通配符的里伯,tssh 會使用第一個匹配到的值城瞎。
    # 這里希望 test2 使用區(qū)別于其他 test* 的密碼,所以將 test* 放在了 test2 的后面疾瓮。
    
    Host test*
        Password 111111  # 支持明文密碼脖镀,但是推薦使用 tssh --enc-secret 簡單加密一下。
    
  • 如果啟用了 ControlMaster 多路復(fù)用狼电,或者是在 Warp 終端蜒灰,需要使用前面 自動交互 的方式實現(xiàn)記住密碼的效果。配置方式請參考前面 自動交互肩碟,加上 Ctrl 前綴即可强窖,如:

    Host ctrl
        #!! CtrlExpectCount 1  # 配置自動交互的次數(shù),一般只要輸入一次密碼
        #!! CtrlExpectPattern1 *assword    # 配置密碼提示語的匹配表達(dá)式
        #!! CtrlExpectSendPass1 d7983b...  # 配置 tssh --enc-secret 編碼后的密碼
    
  • 支持記住私鑰的Passphrase( 推薦使用 ssh-agent )削祈。支持與 IdentityFile 一起配置, 支持使用私鑰文件名代替 Host 別名設(shè)置通用密鑰的 Passphrase翅溺。舉例:

    # IdentityFile 和 Passphrase 一起配置脑漫,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh
    Host test1
        IdentityFile /path/to/id_rsa
        # 下面是運行 tssh --enc-secret 輸入密碼 123456 得到的密文串咙崎,每次運行結(jié)果不同优幸。
        #!! encPassphrase 6f419911555b0cdc84549ae791ef69f654118d734bb4351de7e83163726ef46d176a
    
    # 在 ~/.ssh/config 中配置通用私鑰 ~/.ssh/id_ed25519 對應(yīng)的 Passphrase
    # 可以加上通配符 * 以避免 tssh 搜索和選擇時,文件名出現(xiàn)在服務(wù)器列表中褪猛。
    Host id_ed25519*
        # 下面是運行 tssh --enc-secret 輸入密碼 111111 得到的密文串网杆,每次運行結(jié)果不同。
        #!! encPassphrase 3a929328f2ab1be0ba3fccf29e8125f8e2dac6dab73c946605cf0bb8060b05f02a68
    
    # 在 ~/.ssh/password 中配置則不需要通配符*伊滋,也不會出現(xiàn)在服務(wù)器列表中碳却。
    Host id_rsa
        Passphrase 111111  # 支持明文密碼,但是推薦使用 tssh --enc-secret 簡單加密一下新啼。
    
  • 記住密碼之后還提示輸入密碼追城?可能服務(wù)器的認(rèn)證方式是 keyboard interactive,請參考下文記住答案燥撞。

記住答案

  • 除了私鑰和密碼座柱,還有一種登錄方式,英文叫 keyboard interactive 物舒,是服務(wù)器返回一些問題色洞,客戶端提供正確的答案就能登錄,很多自定義的一次性密碼就是利用這種方式實現(xiàn)的冠胯。

  • 對于只有一個問題火诸,且答案(密碼)固定不變的,只要配置 QuestionAnswer1 即可荠察。對于有多個問題的置蜀,可以按問題的序號進(jìn)行配置,也可以按問題的 hex 編碼進(jìn)行配置悉盆。

  • 使用 tssh --debug 登錄盯荤,會輸出問題的 hex 編碼,從而知道該如何使用 hex 編碼進(jìn)行配置焕盟。配置舉例:

    # 如果配置在 ~/.ssh/config 中秋秤,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh
    Host test1
        # 下面是運行 tssh --enc-secret 輸入答案 `答案一` 得到的密文串脚翘,每次運行結(jié)果不同灼卢。
        encQuestionAnswer1 482de7690ccc5229299ccadd8de1cb7c6d842665f0dc92ff947a302f644817baecbab38601
    Host test2
        # 下面是運行 tssh --enc-secret 輸入答案 `答案一` 得到的密文串,每次運行結(jié)果不同来农。
        encQuestionAnswer1 43e86f1140cf6d8c786248aad95a26f30633f1eab671676b0860ecb5b1a64fb3ec5212dddf
        QuestionAnswer2 答案二  # 支持明文答案鞋真,但是推薦使用 tssh --enc-secret 簡單加密一下。
        QuestionAnswer3 答案三
    Host test3
        # 其中 `6e616d653a20` 是問題 `name: ` 的 hex 編碼沃于,`enc` 前綴代表配置的是密文串涩咖。
        # 下面是運行 tssh --enc-secret 輸入答案 `my_name` 得到的密文串赶袄,每次運行結(jié)果不同。
        enc6e616d653a20 775f2523ab747384e1661aba7779011cb754b73f2e947672c7fd109607b801d70902d1
        636f64653a20 my_code  # 其中 `636f64653a20` 是問題 `code: ` 的 hex 編碼, `my_code` 是明文答案
    
  • 對于 totp 2FA 雙因子驗證碼抠藕,則可以如下配置(同樣支持按序號或 hex 編碼進(jìn)行配置):

    Host totp
        TotpSecret1 xxxxx  # 按序號配置 totp 的 secret(明文),一般可通過掃二維碼獲得
        totp636f64653a20 xxxxx  # 按 `code: ` 的 hex 編碼 `636f64653a20` 配置 totp 的 secret(明文)
        # 下面是運行 tssh --enc-secret 輸入命令 xxxxx 得到的密文串蒋困,加上 `enc` 前綴進(jìn)行配置
        encTotpSecret2 8ba828bd54ff694bc8c4619f802b5bed73232e60a680bbac05ba5626269a81a00b
        enctotp636f64653a20 8ba828bd54ff694bc8c4619f802b5bed73232e60a680bbac05ba5626269a81a00b
    
  • 對于可以通過命令行獲取到的動態(tài)密碼盾似,則可以如下配置(同樣支持按序號或 hex 編碼進(jìn)行配置):

    Host otp
        OtpCommand1 oathtool --totp -b xxxxx  # 按序號配置獲取動態(tài)密碼的命令
        otp636f64653a20 oathtool --totp -b xxxxx  # 按 `code: ` 的 hex 編碼 `636f64653a20` 配置獲取動態(tài)密碼的命令
        # 下面是運行 tssh --enc-secret 輸入命令 oathtool --totp -b xxxxx 得到的密文串,加上 `enc` 前綴進(jìn)行配置
        encOtpCommand2 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
        encotp636f64653a20 77b4ce85d087b39909e563efb165659b22b9ea700a537f1258bdf56ce6fdd6ea70bc7591ea5c01918537a65433133bc0bd5ed3e4
    
  • 如果啟用了 ControlMaster 多路復(fù)用雪标,或者是在 Warp 終端零院,請參考前面 自動交互Ctrl 前綴來實現(xiàn)。

    Host ctrl_totp
        #!! CtrlExpectCount 1  # 配置自動交互的次數(shù)
        #!! CtrlExpectPattern1 code:  # 配置密碼提示語的匹配表達(dá)式(這里以 2FA 驗證碼舉例)
        #!! CtrlExpectSendTotp1 xxxxx  # 配置 totp 的 secret(明文)村刨,一般可通過掃二維碼獲得
        #!! CtrlExpectSendEncTotp1 622ada31cf...  # 或者配置 tssh --enc-secret 得到的密文串
    
    Host ctrl_otp
        #!! CtrlExpectCount 1  # 配置自動交互的次數(shù)
        #!! CtrlExpectPattern1 token:  # 配置密碼提示語的匹配表達(dá)式(這里以動態(tài)密碼舉例)
        #!! CtrlExpectSendOtp1 oathtool --totp -b xxxxx  # 配置獲取動態(tài)密碼的命令(明文)
        #!! CtrlExpectSendEncOtp1 77b4ce85d0...  # 或者配置 tssh --enc-secret 得到的密文串
    

個性配置

  • 支持在 ~/.tssh.conf( Windows 是 C:\Users\your_name\.tssh.conf )中進(jìn)行以下自定義配置:

    # SSH 配置路徑告抄,默認(rèn)為 ~/.ssh/config
    ConfigPath = ~/.ssh/config
    
    # 擴展配置路徑,默認(rèn)為 ~/.ssh/password
    ExConfigPath = ~/.ssh/password
    
    # trz 上傳時嵌牺,對話框打開的路徑打洼,為空時打開上次的路徑, 默認(rèn)為空
    DefaultUploadPath = ~/Downloads
    
    # tsz 下載時逆粹,自動保存的路徑募疮,為空時彈出對話框手工選擇,默認(rèn)為空
    DefaultDownloadPath = ~/Downloads
    
    # tssh 搜索和選擇服務(wù)器時僻弹,配置主題風(fēng)格和自定義顏色
    PromptThemeLayout = simple
    PromptThemeColors = {"active_host": "magenta|bold", "inactive_host": "magenta"}
    
    # tssh 搜索和選擇服務(wù)器時阿浓,每頁顯示的記錄數(shù),默認(rèn)為 10
    PromptPageSize = 10
    
    # tssh 搜索和選擇服務(wù)器時蹋绽,默認(rèn)是類似 vim 的 normal 模式芭毙,想默認(rèn)進(jìn)入搜索模式可如下配置:
    PromptDefaultMode = search
    
    # tssh 搜索和選擇服務(wù)器時,詳情中顯示的配置列表卸耘,默認(rèn)如下:
    PromptDetailItems = Alias Host Port User GroupLabels IdentityFile ProxyCommand ProxyJump RemoteCommand
    
    # tssh 搜索和選擇服務(wù)器時退敦,可以自定義光標(biāo)和選中的圖標(biāo):
    PromptCursorIcon = ??
    PromptSelectedIcon = ??
    
    # 登錄后自動設(shè)置終端標(biāo)題,退出后不會重置鹊奖,你需要參考下文在本地 shell 中設(shè)置 PROMPT_COMMAND
    SetTerminalTitle = Yes
    

配置注釋

  • tssh 配置中的注釋基本與 openssh 一致苛聘,額外做了一些擴展支持,詳見下表:

    注釋 openssh tssh
    # 開頭的配置行 是注釋 是注釋
    #!! 開頭的配置行 是注釋 非注釋
    Key Value # Comment 看情況 是注釋
    Key=Value # Comment 看情況 非注釋
  • # 開頭的配置行忠聚,openssh 一律認(rèn)為是注釋设哗;tssh 認(rèn)為 #!! 開頭的配置行不是注釋,其他以 # 開頭的配置行是注釋两蟀。

  • Key Value # Comment 配置(沒有 = 號)网梢,openssh 有些情況認(rèn)為 # 后的內(nèi)容是注釋,有些情況認(rèn)為不是注釋赂毯;tssh 一律認(rèn)為 # 后的內(nèi)容是注釋战虏。

  • Key=Value # Comment 配置(有 = 號)拣宰,openssh 有些情況認(rèn)為 # 后的內(nèi)容是注釋,有些情況認(rèn)為不是注釋烦感;tssh 一律認(rèn)為 # 后的內(nèi)容不是注釋巡社。

其他功能

  • 使用 -f 后臺運行時,可以加上 --reconnect 參數(shù)手趣,在后臺進(jìn)程因連接斷開等而退出時晌该,會自動重新連接。

  • 運行 tssh --enc-secret绿渣,輸入密碼或答案朝群,可得到用于配置的密文( 相同密碼每次運行結(jié)果不同 )。

    • 上文說的記住密碼記住答案等中符,在配置項前面加上 enc 則可以配置成密文姜胖,防止被人窺屏。
    • 如果密碼中含有 # 等特殊字符淀散,直接配置密碼明文可能會導(dǎo)致登錄失敗右莱,此時則必須使用密文配置。
    Host server2
      # 如果配置在 ~/.ssh/config 中档插,可以加上 `#!!` 前綴隧出,以兼容標(biāo)準(zhǔn) ssh
      encPassword de88c4dbdc95d85303682734e2397c4d8dd29bfff09ec53580f31dd40291fc8c7755
      encQuestionAnswer1 93956f6e7e9f2aef3af7d6a61f7046dddf14aa4bbd9845dbb836fe3782b62ac0d89f
    
  • 運行 tssh --new-host 可以在 TUI 界面輕松添加 SSH 配置,并且完成后可以立即登錄阀捅。

  • 運行 tssh --install-trzsz 可以將 trzsz ( trz / tsz ) 安裝到服務(wù)器上胀瞪。

    • 默認(rèn)安裝到 ~/.local/bin/ 目錄,可以通過 --install-path /path/to/install 指定安裝目錄饲鄙。
    • --install-path 安裝目錄含有 ~/凄诞,則必須加上單引號,如--install-path '~/path'忍级。
    • 若獲取 trzsz 的最新版本號失敗帆谍,可以通過 --trzsz-version x.x.x 參數(shù)自行指定。
    • 若下載 trzsz 的安裝包失敗轴咱,可以自行下載并通過 --trzsz-bin-path /path/to/trzsz.tar.gz 參數(shù)指定汛蝙。
    • 注意:--install-trzsz 不支持 Windows 服務(wù)器,不支持跳板機( 除非以 ProxyJump 跳過 )朴肺。
  • 關(guān)于修改終端標(biāo)題窖剑,其實無需 tssh 就能實現(xiàn),只要在服務(wù)器的 shell 配置文件中(如~/.bashrc)配置:

    # 設(shè)置固定的服務(wù)器標(biāo)題
    PROMPT_COMMAND='echo -ne "\033]0;固定的服務(wù)器標(biāo)題\007"'
    
    # 根據(jù)環(huán)境變量動態(tài)變化的標(biāo)題
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    
    • 如果在 ~/.tssh.conf 中設(shè)置了 SetTerminalTitle = Yes戈稿,則會在登錄后自動設(shè)置終端標(biāo)題西土,但是服務(wù)器上的 PROMPT_COMMAND 會覆蓋 tssh 設(shè)置的標(biāo)題。
    • tssh 退出后不會重置為原來的標(biāo)題鞍盗,你需要在本地 shell 中設(shè)置 PROMPT_COMMAND需了,讓它覆蓋 tssh 設(shè)置的標(biāo)題跳昼。

UDP 模式

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

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

  • tssh 會先作為一個 ssh 客戶端正常登錄到服務(wù)器上墓造,然后在服務(wù)器上啟動一個新的 tsshd 進(jìn)程挪略。

  • tsshd 進(jìn)程會隨機偵聽一個 61000 到 62000 之間的 UDP 端口,并將其端口和密鑰通過 ssh 通道發(fā)回給 tssh 進(jìn)程滔岳。登錄的 ssh 連接會被關(guān)閉,然后 tssh 進(jìn)程通過 UDP 與 tsshd 進(jìn)程通訊挽牢。

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

    Host xxx
        #!! UdpMode KCP
    

故障排除

  • 在 Warp 終端禽拔,分塊 Blocks 的功能需要將 tssh 重命名為 ssh刘离,推薦建個軟鏈接( 對更新友好 ):

    sudo ln -sv $(which tssh) /usr/local/bin/ssh
    
    • 軟鏈后,ssh -V 應(yīng)輸出 trzsz ssh 加版本號睹栖,如果不是硫惕,說明軟鏈不成功,或者在 PATHopenssh 的優(yōu)先級更高野来,你要軟鏈到另一個地方或者調(diào)整 PATH 的優(yōu)先級恼除。

    • 軟鏈后,要直接使用 ssh曼氛,它等價于 tssh豁辉。如果還是用 tssh 是不會支持分塊 Blocks 功能的。

    • --dragfile 參數(shù)可能會讓 Warp 分塊功能失效舀患,請參考前文配置 EnableDragFile 來啟用拖拽功能徽级。

    • 拖拽文件或目錄進(jìn)入 Warp 終端后,可能不會立即觸發(fā)上傳聊浅,需要多按一次回車鍵餐抢,才會上傳。

  • 如果你在使用 Windows7 或者舊版本的 Windows10 等低匙,遇到 enable virtual terminal failed 的錯誤旷痕。

  • 如果在 ~/.ssh/config 中配置了 tssh 特有的配置項后苦蒿,標(biāo)準(zhǔn) ssh 報錯 Bad configuration option

    • 可以在出錯配置項中加上前綴 #!!渗稍,標(biāo)準(zhǔn) ssh 會將它當(dāng)作注釋佩迟,而 tssh 則會認(rèn)為它是有效配置之一团滥。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市报强,隨后出現(xiàn)的幾起案子灸姊,更是在濱河造成了極大的恐慌,老刑警劉巖秉溉,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件力惯,死亡現(xiàn)場離奇詭異,居然都是意外死亡召嘶,警方通過查閱死者的電腦和手機父晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄跌,“玉大人甲喝,你說我怎么就攤上這事☆踔唬” “怎么了埠胖?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長淳玩。 經(jīng)常有香客問我直撤,道長,這世上最難降的妖魔是什么蜕着? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任谋竖,我火速辦了婚禮,結(jié)果婚禮上承匣,老公的妹妹穿的比我還像新娘圈盔。我一直安慰自己,他們只是感情好悄雅,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布驱敲。 她就那樣靜靜地躺著,像睡著了一般宽闲。 火紅的嫁衣襯著肌膚如雪众眨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天容诬,我揣著相機與錄音娩梨,去河邊找鬼。 笑死览徒,一個胖子當(dāng)著我的面吹牛狈定,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼纽什,長吁一口氣:“原來是場噩夢啊……” “哼措嵌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起芦缰,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤企巢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后让蕾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浪规,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年探孝,在試婚紗的時候發(fā)現(xiàn)自己被綠了笋婿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡顿颅,死狀恐怖缸濒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情元镀,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布霎桅,位于F島的核電站栖疑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏滔驶。R本人自食惡果不足惜遇革,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望揭糕。 院中可真熱鬧萝快,春花似錦、人聲如沸著角。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吏口。三九已至奄容,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間产徊,已是汗流浹背昂勒。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舟铜,地道東北人戈盈。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像谆刨,于是被迫代替她去往敵國和親塘娶。 傳聞我的和親對象是個殘疾皇子归斤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容