用 Relayium CLI 通过 SSH 把文件备份到自己的服务器
最近更新: 2026-08-05
如果你已经能 ssh 到某台机器上——VPS、家庭服务器、NAS、工作站都算——那就可以用 Relayium CLI 直接把文件备份过去,不用搭同步服务,也不用注册账号。传输走的是你现有的 SSH 连接,字节直接进你的服务器,从不经过 Relayium。
本文介绍怎么 push 和 pull 目录、断点续传与完整性校验各自能带来什么,以及如何用 cron 让它定时跑起来。
开始之前
下面用到的都是 relayium CLI,所以没装的话先装上。在 macOS 或 Linux 上,一条命令就能把预编译二进制放进你的 PATH:
curl -fsSL https://relayium.com/install.sh | sh
- 想自己挑文件,或在 Windows 上?从发布页下载二进制——relayium.com/cli 列出了所有安装方式(装了 Go 也可 go build -o relayium ./cmd/relayium)。
- relayium --version 可确认是否装好。不装这一步,下面的命令只会报 “command not found”。
把一个目录 push 到你的服务器
你需要准备
- 你已经在用的 SSH 访问权限。ssh user@your-server true 必须静默返回——push 复用的就是这条连接,它自己不做任何额外配置。
- 服务器上一个可写的落点。目标路径的上一级目录必须存在,且那个 SSH 用户对它有写权限。
- 服务器上可选装 relayium,它换来的是断点续传和逐文件 SHA-256。不装 push 也能用,走普通 tar 流。
- 不需要 Relayium 账号,两端也都不需要跑守护进程。这里的一切都不会与 Relayium 的服务器通信。
push 接受一个或多个源,以及一个 scp 风格的目标地址。Relayium 会用你平常的密钥和配置通过 SSH 连过去,再把文件流式写入目标目录:
确认 push 将要复用的那条 SSH 访问。静默返回就说明你的密钥、主机别名和端口都已正确。
ssh user@your-server true查清你会走哪条协议。打印出路径就是原生协议——断点续传加逐文件 SHA-256;什么都不打印就是走 tar 流兜底。
ssh user@your-server command -v relayium把目录 push 上去。目标是 scp 风格的写法,末尾的斜杠表示“放进这个目录里”。
relayium push ./photos user@your-server:backups/如果你的 ssh 配置里还没有这台主机,就为这一条命令临时指定密钥或端口。
relayium push -i ~/.ssh/id_ed25519 -p 2222 ./photos user@your-server:backups/确认落地结果。push ./photos 会在目标下重建 photos/,所以文件夹名会一起带过去。
ssh user@your-server ls backups/photos
成功时你会看到什么
走原生协议时,push 每传完一个文件打印一行,并以 0 退出。对着裸机服务器则只打印一行汇总——那是 tar 兜底,同样算成功。
relayium push ./photos user@your-server:backups/
photos/IMG_0413.jpg (2314518 bytes)
photos/IMG_0414.jpg (1998233 bytes)
# against a server with no relayium installed, one summary line instead:
sent 2 file(s) (zero-dependency mode)- 它会复用你的 ~/.ssh/config,所以你早就配好的主机别名、密钥和端口都能直接生效。
- 如果服务器上装了 relayium,就走原生协议:逐文件断点续传,并对每个文件做 SHA-256 校验。
- 如果没装,就退回到把 tar 流通过管道送给远端,所以一台没有 relayium 的裸服务器也能收。
把文件 pull 回来
恢复就是把同一条命令反过来写:给出一个远程源和一个本地目标目录。恢复备份,或者把服务器上的产物同步回笔记本,都用它:
relayium pull user@your-server:backups/ ./restore
- 和 push 不同,pull 始终需要远端已经装好 relayium——它没有 tar 兜底方案,远端要是没装,请先装好。
断点续传与完整性校验都是内置的
备份往往体积很大,网络又常常掉线。两端都装了 relayium 时,中断的传输会在下次运行时从断点接着传,而不是重头再发一遍;每个文件还会用 SHA-256 哈希做端到端校验——落到服务器上的内容,和你发出去的逐字节一致。
如果你想放弃续传、做一次干净的完整重发,加上 --no-resume 即可。
- 续传需要远端装有 relayium(走原生协议);tar 兜底方案每次都是完整发送。
- SHA-256 校验会自动进行;一旦对不上就会报出来,该文件被标记为失败。
用 cron 定时运行
push 是一条用你自己 SSH 密钥的非交互式命令,所以可以原样放进 cron 做定期备份。给它指定一个没有口令的密钥(或者用 agent),并把输出记下来,好让失败能被看见:
# 每晚 2 点备份——加到你的 crontab 里(crontab -e)
0 2 * * * relayium push -i ~/.ssh/backup_key ~/documents user@your-server:backups/ >> ~/relayium-backup.log 2>&1
- 配合续传,一个被中断的夜间任务下一晚会自动接着传。
- 只要有文件没通过完整性校验,命令就会以非零状态退出,cron 的失败邮件通知就能发现问题。
备份没落地的时候
定时备份天生就是悄无声息地失败的——没人盯着终端。下面四种覆盖了几乎全部情况,而且每一种都能用一条你现在就能跑的命令定性。
现象、检查、修复
- cron 任务卡住,或者日志停在一个输入密码的提示上。
ssh -i ~/.ssh/backup_key -o BatchMode=yes user@your-server true # Permission denied (publickey).BatchMode=yes 会拒绝弹出提示,于是把静默的卡死变成了这一行。把这把密钥的公钥加到服务器的 ~/.ssh/authorized_keys 里,或者让任务改用 agent 已经持有的那把密钥。
- crontab 那行跑了,日志却始终是空的。
command -v relayium # /usr/local/bin/relayiumcron 用的是一份极简 PATH,通常不含 /usr/local/bin,所以那行在 relayium 启动之前就失败了。把刚才查出来的绝对路径写进 crontab 条目里,并保留 >> ~/relayium-backup.log 2>&1 重定向,好让下一次失败看得见。
- 被中断的传输,下一次运行时从零重来。
ssh user@your-server command -v relayium # (什么都不打印)断点续传是原生协议的能力,远端没有 relayium 就意味着走 tar 流兜底,而它每次都把文件整份重发。在服务器上装好它就能拿到逐文件续传——同时确认你没有传 --no-resume,那个参数就是用来关掉它的。
- 出现 “N file(s) failed integrity check”,并以非 0 退出。
relayium push ./photos user@your-server:backups/ # 1 file(s) failed integrity check: [photos/IMG_0413.jpg] echo $? # 1落地时算出的 SHA-256 与发送时的不一致,所以服务器上的那个文件不可信。重新 push 一次并再看一次退出码;如果同一个文件反复失败,就单独 push 这一个文件,把源文件坏了和链路坏了区分开。
常见问题
文件会经过 Relayium 的服务器吗?
不会。push 和 pull 完全跑在你自己的 SSH 连接上。Relayium 的服务器全程不参与,也不需要账号。
服务器需要装 relayium 吗?
要看方向。对 push 来说是可选的:远端装了 relayium 就能走原生协议——支持断点续传,并对每个文件做 SHA-256 校验;没装的话,push 会退回到通过 SSH 传输 tar 流,依然可用,只是每个文件每次都完整发送。对 pull 来说则是必须的:pull 始终需要远端装有 relayium(它没有 tar 兜底方案),请先在远端装好。
它怎么决定用哪个 SSH 密钥和端口?
它会像 ssh 一样读取你的 ~/.ssh/config,所以主机别名、密钥和端口都会被自动识别。你也可以在单条命令里用 -i 指定身份文件、用 -p 指定端口来覆盖它们。
这比 rsync 快吗?
在推送到自己服务器这件事上,速度和走 SSH 的 rsync 差不多。重点不是跑赢 rsync,而是让你只用一个工具,就能顺带做跨网络传输和服务器之间的传输,而且续传与完整性保证完全一致。
用最直接的方式备份你的下一个目录——走你自己的 SSH,支持断点续传、完整性校验,而且免费。
获取 CLI