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
支持很多快捷鍵,支持搜索,在tmux
、iTerm2
和Windows 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_tips
和shortcuts
與前文tiny 小巧風
相同。
支持 trzsz
在服務器上要安裝 trzsz,才能使用
trz / tsz
上傳和下載,可任選其一安裝:Go 版( ? 推薦 )、Py 版、Js 版。-
在
~/.ssh/config
或ExConfigPath
配置文件中,配置EnableDragFile
為Yes
啟用拖拽上傳功能。Host * # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前綴,以兼容標準 ssh EnableDragFile Yes
如果只是想臨時啟用拖拽上傳功能,可以在命令行中使用
tssh --dragfile
登錄服務器。-
在
~/.ssh/config
或ExConfigPath
配置文件中,配置EnableTrzsz
為No
禁用 trzsz 和 zmodem。Host no_trzsz_nor_zmodem # 如果配置在 ~/.ssh/config 中,可以加上 `#!!` 前綴,以兼容標準 ssh EnableTrzsz No
支持 zmodem
-
在
~/.ssh/config
或ExConfigPath
配置文件中,配置EnableZmodem
為Yes
啟用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
),tmux
和Windows Terminal
中一次選擇多臺服務器,批量登錄,并支持批量執行預先指定的命令。按下
Space
、Ctrl+X
等可以選中或取消當前服務器,若不能選中說明還不支持當前終端,請先運行tmux
。按下
a
或Ctrl+A
全選當前頁所有機器,o
或Ctrl+O
反選當前頁所有機器,d
或l
翻到下一頁。按下
p
或Ctrl+P
以分屏的方式登錄,w
或Ctrl+W
以新窗口登錄,t
或Ctrl+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"
分組標簽
如果服務器數量很多,分組標簽
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
,可配置為each
或enter
:- 配置
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
-
下面配置
test1
和test2
的密碼是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
加版本號,如果不是,說明軟鏈不成功,或者在PATH
中openssh
的優先級更高,你要軟鏈到另一個地方或者調整PATH
的優先級。軟鏈后,要直接使用
ssh
,它等價于tssh
。如果還是用tssh
是不會支持分塊 Blocks 功能的。--dragfile
參數可能會讓 Warp 分塊功能失效,請參考前文配置EnableDragFile
來啟用拖拽功能。拖拽文件或目錄進入 Warp 終端后,可能不會立即觸發上傳,需要多按一次
回車
鍵,才會上傳。
-
如果你在使用 Windows7 或者舊版本的 Windows10 等,遇到
enable virtual terminal failed
的錯誤。 -
如果在
~/.ssh/config
中配置了tssh
特有的配置項后,標準ssh
報錯Bad configuration option
。- 可以在出錯配置項中加上前綴
#!!
,標準ssh
會將它當作注釋,而tssh
則會認為它是有效配置之一。
- 可以在出錯配置項中加上前綴