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
支持很多快捷鍵壁熄,支持搜索帚豪,在tmux
、iTerm2
和Windows 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_tips
和shortcuts
與前文tiny 小巧風(fēng)
相同。
支持 trzsz
在服務(wù)器上要安裝 trzsz扁藕,才能使用
trz / tsz
上傳和下載沮峡,可任選其一安裝:Go 版( ? 推薦 )、Py 版亿柑、Js 版邢疙。-
在
~/.ssh/config
或ExConfigPath
配置文件中,配置EnableDragFile
為Yes
啟用拖拽上傳功能望薄。Host * # 如果配置在 ~/.ssh/config 中疟游,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh EnableDragFile Yes
如果只是想臨時啟用拖拽上傳功能痕支,可以在命令行中使用
tssh --dragfile
登錄服務(wù)器颁虐。-
在
~/.ssh/config
或ExConfigPath
配置文件中,配置EnableTrzsz
為No
禁用 trzsz 和 zmodem卧须。Host no_trzsz_nor_zmodem # 如果配置在 ~/.ssh/config 中另绩,可以加上 `#!!` 前綴,以兼容標(biāo)準(zhǔn) ssh EnableTrzsz No
支持 zmodem
-
在
~/.ssh/config
或ExConfigPath
配置文件中花嘶,配置EnableZmodem
為Yes
啟用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
)窄赋,tmux
和Windows Terminal
中一次選擇多臺服務(wù)器哟冬,批量登錄楼熄,并支持批量執(zhí)行預(yù)先指定的命令。按下
Space
浩峡、Ctrl+X
等可以選中或取消當(dāng)前服務(wù)器可岂,若不能選中說明還不支持當(dāng)前終端,請先運行tmux
翰灾。按下
a
或Ctrl+A
全選當(dāng)前頁所有機器缕粹,o
或Ctrl+O
反選當(dāng)前頁所有機器,d
或l
翻到下一頁纸淮。按下
p
或Ctrl+P
以分屏的方式登錄平斩,w
或Ctrl+W
以新窗口登錄,t
或Ctrl+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"
分組標(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
抹腿,可配置為each
或enter
:- 配置
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
-
下面配置
test1
和test2
的密碼是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
跳過 )朴肺。
- 默認(rèn)安裝到
-
關(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
加版本號睹栖,如果不是硫惕,說明軟鏈不成功,或者在PATH
中openssh
的優(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)為它是有效配置之一团滥。
- 可以在出錯配置項中加上前綴