Warp 终端中配置使用 trzsz 实现 sz/rz Zmodem 协议命令传输文件

✨ 本文介绍了如何在Warp终端中配置使用trzsz工具实现Zmodem协议的文件传输。Zmodem协议通过sz和rz命令支持快速、可靠的文件发送和接收,增强了文件传输的效率。作者还推荐了trzsz-ssh工具,作为openssh的替代品,进一步简化了通过SSH进行文件传输的流程。

TOC

前言

一个好的终端能显著提升工作效率,因此市场上有许多终端模拟器应用。在macOS上,我曾使用过iTerm 2和 Kitty,但随着 Warp 的出现,我逐渐将 Warp 作为主力应用。Warp是一款基于 Rust 语言追求快速而重新设计的终端,通过 AI 和协作工具提高生产力,简化了命令的调用和分享。

https://app.warp.dev/referral/W6V55L

关于 Warp 的介绍官网文档以及各路文章已经很多,此处不做展开。这里记录下在 Warp 终端中使用 rz /sz 命令相关配置。

ZMODEM 是一种广泛使用的文件传输协议,主要用于在计算机之间高效、可靠地传输文件。其设计目标是提高传输速度并减少出错的机会,特别是在不稳定的网络环境中。ZMODEM 相比于其前身 XMODEM 和 YMODEM,拥有更快的传输速度和更强的错误检测能力。

在 ZMODEM 文件传输协议中,sz 和 rz 是两个常用的命令,分别用于发送和接收文件。

  • sz 命令:sz 代表 Send ZMODEM,是用来从本地计算机向远程计算机发送文件的命令。当用户在终端输入 sz filename 时,该命令会将指定的文件通过 ZMODEM 协议发送到连接的远程系统。sz 自动处理文件的压缩和错误检测,并提供进度反馈,确保文件完整性。
  • rz 命令:rz 代表 Receive ZMODEM,是用来从远程计算机接收文件的命令。当用户在远程终端输入 rz 时,系统等待接收文件并通过 ZMODEM 协议接收文件传输。此命令同样支持文件压缩和错误检测,确保用户能够成功接收到文件。

配置

在尝试直接在 Warp 终端下使用 lrzsz 命令未果后,发现了 trzsz 这个项目。

https://trzsz.github.io/

之前在 V2EX 上的帖子也经常刷到这个项目。如其介绍所说:trzsz ( trz / tsz ) 是一款优秀的文件传输工具,和 lrzsz ( rz / sz ) 类似的、兼容 tmux 的文件传输工具。

本打算是直接使用这个的,但随后发现了此项目的衍生项目—— trzsz-ssh 。trzsz-ssh ( tssh ) 设计为 ssh 客户端的直接替代品,提供与 openssh 完全兼容的基础功能,同时实现其他有用的扩展功能。其直接内置支持了 trzsz ( trz / tsz ) 工具,下面直接安装此工具来达成目的。

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

安装

通过 Homebrew 安装

大陆网络受限用户可通过此项目来使用 Homebrewhttps://github.com/Brewforge/homebrew-chinese
brew update
brew install trzsz-ssh

使用 trzsz

通过 tssh 登录远程主机,在远程主机上安装 trzsz。(此处系统版本为 Debian 12

curl -s 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x7074ce75da7cc691c1ae1a7c7e51d1ad956055ca' \
  | sudo 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 trzsz
tssh remote_server

# 上传文件(类似 rz
trz

# 上传文件夹
trz -r

# 下载文件 (类似 sz
tsz filename
tsz /path/to/filename

# 下载文件夹
tsz -r dir
tsz -r /path/to/dir

使用传统 Zmodem (sz / rz)

在 ~/.ssh/config 中添加如下配置

Host *
    #!! EnableZmodem Yes
tssh remote_server

# 接收
rz
# 发送
sz filename

上面我没有将 tssh 命令创建软链接命名为 ssh ,这会使得 Warp 终端的分块 Blocks 功能失效,我是使用了 Warp 的 sub-shell 功能,将 tssh 命令加入了其中。

当然也可参照下方 trzsz-ssh 官方文档的建议来进行配置:

参考资料

https://trzsz.github.io/cn/sshhttps://github.com/warpdotdev/Warp/issues/988