免认证/匿名远程传输文件(Wormhole)

发表于 更新于

前言

文件传输是一个很基础且被广泛应用的需求。服务器上可以使用 SCP/SFTP,用户间则普遍使用 IM 工具的文件发送功能。也可以通过网盘来间接的将文件传输给对方。等等。

但这些工具都不太适合给陌生人传输文件,因为它们都要经过身份认证。向服务器传输文件,我们需要 SSH 登录信息。向普通用户传输文件,我们得是对方的 IM 好友,而且通常有大小限制。

如果有一种文件传输模式,类似某些远程桌面软件那样,输入一个口令便建立传输,那就太好了。本文介绍的 Wormhole 就是这样一个工具。它可以免除身份认证,匿名的发送和接收文件。

效果

我想有必要展示一下效果,让读者提前知道其便捷程度。

在我的电脑上,使用命令发送一个文件:

$ wormhole send ./鸽鸽跳舞.mp4
Sending 14.3 MB file named '鸽鸽跳舞.mp4'
Wormhole code is: 6-ultimate-snowslide
On the other computer, please run:

wormhole receive 6-ultimate-snowslide

Wormhole 最后输出了一条接收命令,我复制它并发给他人让其执行:

$ wormhole receive 6-ultimate-snowslide
Receiving file (14.3 MB) into: '鸽鸽跳舞.mp4'
ok? (Y/n):
Receiving (->relay:tcp:transit.magic-wormhole.io:4001)..
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 14.3M/14.3M [00:03<00:00, 4.27MB/s]
Received file written to 鸽鸽跳舞.mp4

这里我们使用 wormhole send ./鸽鸽跳舞.mp4 命令发送了一段 cxk 跳舞的视频,对面是一位 ikun,他兴奋的使用 wormhole receive 6-ultimate-snowslide 命令接收到了。

这之间没有身份认证,即没有登录、没有密钥交互。

首先是 wormhole send 命令生成了一个值为 6-ultimate-snowslide 的传输码(或者叫口令)。然后 wormhole receive 命令使用这个口令接收到发送者的文件。这便是传输的基本逻辑。

我们不用在意接收方,甚至不用在意发送方。假设你的服务器太多,用这种方式传输文件十分方便。或者你给陌生人传输文件,丢个码即可。

你也许不喜欢命令行,没关系,后文会介绍一种兼容 Wormhole 的图形客户端软件。

优势

除了建立传输关系更加便捷,Wormhole 还是即时传输的模式。也就是发送者发了多少,接收者就收到多少。不像 IM 或网盘,需要先保存到他们的服务器,然后对方再去下载。

当然,这种模式并不是万能药。它确实显得更即时了,但也加大了风险(因为同时考验发送/接收双方的网络稳定性)。所以传输特别大的文件的话,还是网盘更可靠一些。

安装

如果你使用的是 Linux 操作系统,参考此处的列表。存在的发行版,直接用包管理安装即可。如果你的发行版软件源没有这个软件包,或者你嫌弃它(的版本)太老了。也可以使用 snap 安装:

sudo snap install wormhole

Snap 是一个容器环境,可以让不同的发行版共用同一个仓库中的软件而不会出现兼容问题。如果你不喜欢 Snap 那通常只能选择本地安装了。

这里还有一些整理好的其它类型客户端的下载地址:

使用

如同效果中的例子,发送就是 send 子命令,接收就是 receive 子命令。接收命令执行后,会提醒你确认是否是要接收的文件,如果是直接回车就开始传输了。

批量发送

如果你指定的发送路径的是一个文件夹,那么 Wormhole 会将整个文件夹打包发送。当然接收方不用在意解压,因为 Wormhole 会自动做这一步。

无公网

在 Wormhole 的架构中,传输码是由 Wormhole 的中心服务器生成和维护的。所以发送/接收双方才可以在不知晓彼此的情况下建立连接。

也就是说发送者和接受者并不能在无公网的环境下使用,但如果你自行部署服务端则可以(具体原因参考下文的解释原理)。

原理

Wormhole 需要两个不同角色的服务器:一个用于传输码管理以及客户端之间的通信/协商,被称作邮箱服务器。一个负责中继传输客户端之间的流量,被称作中继服务器。

无论客户端之间否能直连,都需要跟邮箱服务器通信。经过邮箱服务器协商以后,如果客户端之间可以直连,便会直连传输文件。如果不能直连,就会使用中继服务器传输。其关系图如下:

flowchart TB;
    S(发送者)-. 协商 <-.->M((邮箱服务器)) -. 协商 <-.->R(接收者)
    S-- 直连发送 -->R
    S-- 传输 -->T((中继服务器)) -- 转发 -->R

Wormhole 顾名思义就是「虫洞」,无论双方能否直连,它都将尝试建立一个直接路径或间接的隧道用于传输。并且即使通过中继服务器,传输也是免费的。

一般在服务器之间或具有 IPv6 网络的设备之间,或内网设备之间,都会优先直连传输。

GUI 客户端

Warp 是 PC 上最值得推荐的 GUI 客户端,它由 Gnome 团队开发,但不依赖 Gnome 桌面。从安装章节访问下载地址,若是 Linux 也可以从发行版自己的软件源中检索,Windows 则从 GitLab 的发布页面找资源包下载。

Warp 截图

它的界面简约美观。

匿名发送/接收

Wormhole 支持利用 Tor 网络匿名发送和或接收。在使用前要打开 Tor 浏览器,并连接上 Tor 网络。像这样:

wormhole send --tor ./鸽鸽跳舞.mp4

接收时也可以利用 Tor 保护自己:

wormhole receive <code> --tor

如果双方都使用 Tor 网络传输,那么发送方和接收方就不可能知道彼此是谁(即和哪个设备 IP 通信)。这在某些情况下是有意义的,但传输速度可能会很慢。

部署服务端

如果你想把 Wormhole 应用于公司内部,可以选择自己部署服务端。这样做可以提高安全性,甚至可以无节制的使用而不用担心占用公共资源。部署以后,需要修改 Wormhole 或 Warp 的配置中的两个地址,对应自己的部署的服务端访问地址。

注意:接收方必须和发送方使用同一个邮箱服务器地址,否则他们无法建立联系。

结束语

这就是 Wormhole 的介绍了。我认为这个工具无论是普通网民还是 IT 从业者,都有相当高的价值,值得推荐。

作者头像 一点点入门知识 打赏作者
本文由作者按照 CC BY 4.0 进行授权
分享: