
magic-wormhole:用一次性代码安全传文件
Table of Contents
大家好,
今天想聊一个我在支持场景和应急处理中经常用到的小工具:magic-wormhole。它解决的是那种在普通公司里比任何“企业级故事”都常见的问题:你需要把一个文件(或目录)立刻发给对方,但邮件太小,云盘链接在政策或法律层面很敏感,而“临时开个端口”又根本不可行。
周五 16:47。一家大约 60 人的公司遇到紧急情况:中心文件服务器变慢,用户报超时,外部 IT 服务商要求提供一个支持包(日志 + 小段配置导出)。包接近 900 MB。邮件发不了,SharePoint 因合规要求不能用,而临时搭一个 FTP 在 2026 年真的不值得。
这种时候 magic-wormhole 很好用:交换一次性代码,端到端加密传文件,搞定。
什么是 magic-wormhole?
magic-wormhole 是一个用于两台电脑之间 临时(ad-hoc)传文件 的轻量工具。关键是 wormhole code(例如 7-coral-lion):双方输入同一个代码,工具就会据此建立一条 端到端加密 的传输通道。
它的价值在于“不需要什么”:
- 不需要账号
- 不需要登录门户
- 不需要“上传到某个地方再分享链接”
- 不需要开放入站防火墙规则
双方只要安装了 wormhole,并且能出网即可。实际经验是:只要 HTTP(S) 出站能走,magic-wormhole 通常也能用。
一个常见的中小企业案例
回到周五那个例子,现实中的流程通常是:
- 生成支持包(日志、导出、几张截图)。
- 可选:计算哈希,方便之后确认对方收到的是同一份文件。
- 用 magic-wormhole 发送支持包。
- 通过 第二个渠道 传递代码(电话、另一个私聊、口头读给对方)。
发送端:
tar -czf support-bundle.tgz ./logs ./config-export
sha256sum support-bundle.tgz
wormhole send support-bundle.tgz
magic-wormhole 会打印出代码。接收端运行:
wormhole receive
输入代码,开始下载,然后比对哈希。对很多中小企业来说,这种“很快,但依然规范”的方式特别实用。
我在实践中怎么用
从 A 发送到 B
发送端:
wormhole send /path/to/file.zip
接收端:
wormhole receive
文件会落在当前目录。我通常会先建一个接收目录,避免东西散落在 Downloads 或桌面:
mkdir -p ~/wormhole-recv && cd ~/wormhole-recv
wormhole receive
发送目录
如果要传整个文件夹:
wormhole send --dir ./support-bundle/
背后发生了什么(简短,不讲营销)
magic-wormhole 帮你把三个麻烦事隐藏了:找到对端、安全协商密钥、以及 在 NAT/防火墙环境下可靠传输。
| 步骤 | 发生了什么 | 为什么重要 |
|---|---|---|
| 1. 代码 | 发送端生成一个短的一次性代码。 | 这次传输的共享秘密。 |
| 2. Rendezvous | 双方连接到 rendezvous 服务器(默认是公开的 “mailbox”)。 | 无需入站端口也能互相找到。 |
| 3. PAKE | 通过 SPAKE2(PAKE)从代码导出共享密钥。 | 不用搞复杂的密钥分发也能拿到 E2E 密钥。 |
| 4. 数据路径 | 先尝试直连,失败则回退到 relay/transit。 | 在 NAT 和常见办公网络里也能工作。 |
| 5. E2E 传输 | 数据端到端加密,并做完整性保护。 | relay 只能看到密文。 |
关键点:rendezvous/relay 是基础设施,但 不是你的数据以明文存在的地方。
安全性:优势、边界与一些规则
我喜欢 magic-wormhole 的一点是它的安全模型很“诚实”:它给你端到端加密,但身份不自动包含在内。
你能得到什么
- 端到端加密:即使走 relay,内容仍然只在发送端和接收端可解。
- 短生命周期:代码只为这一次传输服务,不是长期密码。
- 攻击面小:没有需要加固的服务器、没有用户管理、没有 Web 后台。
你需要注意什么
- 代码就是密码。 谁拿到代码,谁就是“对端”。代码出现在公开工单里就是事故。
- 默认不提供审计。 有的公司把这当优点,有的公司无法接受。如果你需要 DLP、审批和可追溯性,请走官方渠道。
- 端点安全仍然是根本。 发送端被入侵,发什么都可能;接收端被入侵,收到之后一样有风险。
实用规则(真的有用)
- 不要在同一条沟通渠道里同时发工单链接/上下文和代码。最好电话或另一个私聊。
- 默认日志里可能含 token、主机名或个人数据,只发送必要内容。
- 对关键文件:哈希用第二渠道发送,接收后验证。
安装(短小且现实)
很多系统直接用包管理器就行:
- Debian/Ubuntu:
sudo apt install magic-wormhole - macOS:
brew install magic-wormhole
如果发行版包太旧,pipx 往往更干净:
pipx install magic-wormhole
pipx ensurepath
如果你完全不想碰 Python(最小化服务器、容器、救援环境等),可以用兼容的 Go 版本 wormhole-william(单个二进制文件)。
自动化与自建
在受控流程里,magic-wormhole 也可以脚本化:
CODE="5-alpaca-orbit"
wormhole send --code "$CODE" /path/to/db.dump
接收端:
wormhole receive --code "$CODE" --accept-file
这很方便,但一旦把 code 固定下来,就又回到了凭据管理。要自动化,就要配合规范的 secret 管理和短有效期。
如果你想完全控制 rendezvous/relay,可以把客户端指向自建基础设施,例如:
--relay-url指定自建 rendezvous 服务器--transit-helper指定自建 transit relay
结语
magic-wormhole 不能替代那些有策略、有审计的“正式”文件传输流程。但作为日常工具,它非常强:快、低摩擦,并且安全模型清晰。
特别是在中小企业环境里,很多时候既没时间也没精力为每个支持请求走一套复杂审批。一个“足够安全、马上能用”的工具,往往正好。
资料与延伸阅读
- magic-wormhole documentation (Read the Docs)
- magic-wormhole on GitHub
- wormhole-william (Go, single binary)
- magic-wormhole on PyPI
下次见, Joe


