之所以要这么折腾,首先需要强烈谴责那些为某墙作出过贡献的程序员,解放后你们是一定会被清算的。
需求
这事的需求是这样的,我有几个国外的VPS用来跑自己和朋友的BLOG,为了保险起见,我搞了一套备份系统:
在家里的服务器上开了一个ZFS做远程VPS的备份,备份方法是每天晚上通过rsync over ssh进行同步,然后本地服务器生成快照做版本控制。
实现起来很简单,也可以满足需求:
如果远端VPS数据丢失(故障,意外删除,被黑等),我都可以立即重新开一个VPS,再把本地备份的数据恢复回去。即使是远程数据被错误修改,我也可以 通过本地ZFS的快照克隆出之前几天的备份来恢复。总体上说还是相当靠谱的——虽然目前也只恢复过一次,去年有一次DO的母鸡出了故障,VPS恢复后无法 SSH接入,它们那个破CONSOLE在国内根本连不上,只好重装。
但是现在问题来了。
因为rsync走的是SSH通道,而SSH协议是被监视的,流量一大就会被封,我因为这个备份功能被封了好几次,真是TMD想砍人。反革命都是这样被逼出来的。
然而在解放前,只能自己想办法解决了……
现在就来说说新的方案吧。
方案选择
本来是想参照前文说的那个方案用GPG加密后通过HTTP明文传输——因为某墙不会直接封杀明文的HTTP,只是会对其中传输的内容进行审查,但是因为经过了GPG加密,它也审查不出啥来,只是速度会慢而已,但至少不会断。
但是问题来了:因为GPG解密过程必须要有私钥密码,这个又必须是人工输入,不能自动输入?