文件传输工具croc

背景

经常有需求要在同一网络的不同设备中传输文件.
目前的一些方案,但在各方面都有些限制.

  1. 使用ssh或rsync
    1. 需要两个主机都安装ssh,都要做好配置
    2. 密钥文件可能不能给
    3. 如果是密码可能需要次次输入.
    4. 命令稍微复杂
  2. 使用局域网聊天软件
    1. 大多数仅限于在windows平台上使用,难以覆盖全平台
    2. 有些软件构建了需要中心的网络.操作/功耗方面都比较糟心.

正好HelloGitHub第68期看到了croc工具,觉得不错

介绍

croc是一个用于跨设备互传文件的工具,主打特色

  1. 无需中心服务器,在两台机器之间建立点对点连接.
  2. 安全性方面使用端到端加密.
  3. 跨一些平台(windows,linux,mac),可惜没有Android
  4. 支持传文件夹

原理方面

  1. croc使用公共的中继服务器辅助建立连接
    1. 不过提供了自建中继的方法
  2. 使用PAKE进行端到端加密

初步使用

1
2
3
4
5
6
7
# 发送方
croc send 文件/文件夹 # 会自动产生一个房间号
croc send --code 房间号 文件/文件夹 # 自定义传输的房间号

# 接收方
croc 房间号 # 然后选择是否接收
croc --yes --overwrite 房间号 # 同意覆盖同名文件

croc并不限制网络位置,即便不在同一局域网,也能互相找到.

  1. 算是一个优点
    1. 不需要固定ip
    2. 不需要配置端口转发
  2. 对房间号提出了要求,不能太短.

此外

  1. 还能传输单纯的文字
  2. 还能在管道中使用
  3. 官方提供了适当的二次开发指导

配置自定义中继服务器

中继服务器端

运行 croc relay, 即可搭建一个中继服务器.
会在几个端口(比如9009-9013)开始监听.
可以自定义端口但至少要有两个(一个传文件,一个传指令).
一般最小的那个端口传指令(比如上面的9009).

甚至官方还提供了使用docker部署的指导

1
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc

其他端

需要使用参数来指定使用哪个中继服务器.
如果有密码还要指定密码

1
croc --pass YOURPASSWORD --relay "myreal.example.com:9009" send [filename]

甚至官方还贴心地考虑了命令行暴露密码的问题,
允许使用 --pass FILEWITHPASSWORD 的方式指定密码.

在局域网中使用

这样可以在局域网中一台公共的设备上,建立一个中继服务器.
然后其他电脑统一配置好croc相关的alias,然后就能较为安全地传输文件了.

  1. 发送方似乎不检测中继服务器是否存在,而接收方会
  2. 使用glances查看了一会儿,似乎性能上没有太大问题

参考

  1. 第68期HelloGithub
  2. 官方Github