求助 rsync 的用法

2021-05-08 08:35:09 +08:00
 nbweb

博客在一台 vps 上,想定时备份一下,两个 vps 都是 debian,昨天折腾了一下午,也没能成功。

A 的 vps 是博客,想备份到 B 的 vps 上去,以防万一。

问题: 1,是不是要把 A 当成 rsync 的服务器来用?自己配置一个 rysncd.conf 的文件?这个文件里面内容是啥? 2,是不是有两种方式登录,一种是 ssh,一种是 rsync 的方式?我在 rsycd.conf 里写了用户名和密码,却总你不成功。 3,没有用证书登录,如何用免密码同步备份?

谢谢各位大佬。

1594 次点击
所在节点    问与答
12 条回复
justrand
2021-05-08 08:41:32 +08:00
nbweb
2021-05-08 08:51:09 +08:00
@justrand 非常感谢,有几点不明,希望指点。

5.2 rsync 协议
除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用 rsync://协议。
这一句,意思是说,如果用 rsync 协议来传输,那么本地和远端,都需要配置 rsycd.conf,把 rsync 运行起来? debian 里面默认 rsyc 是不运行的。

另外这个 module 资源名,是哪里配置的?本地和远端都需要配置吗?

感谢!
toaruScar
2021-05-08 08:58:16 +08:00
最简单的是直接用定时工具( systemd,corntab )之类的定时跑一下 rsync 命令,这种配置下,就不需要设置 rsync 的 daemon 了。
> 3,没有用证书登录,如何用免密码同步备份?
可以直接在 A 生成一个 rsync 专用的密钥,然后把公钥拷到 B 的 authorized_keys 里面,并用“command=”的配置把这公钥可运行的命令锁住,这样是最基本的跨 host 拷贝文件了。
iBugOne
2021-05-08 08:58:18 +08:00
Rsync 支持多种协议,包括 SSH 和专门的 Rsync 协议,其中 Rsync over SSH 就和本地 Rsync 没啥区别(是的你可以用 Rsync 同步本地的资料,我就这样把系统盘定期备份到另一块硬盘上的)。

如果你不需要对外公开服务,那么你没有必要研究 rsyncd 服务端,直接使用 over SSH 即可,例如你可以在 B 上运行

rsync -a --delete root@A:/var/www/html /mnt/backup/A

如果你需要提供公开的 Rsync 服务并且不方便通过 SSH 提供的话(常见于软件镜像站),才需要配置 rsyncd 服务端(比如 rsyncd.conf )。对于「备份一个 VPS 」来说你应该直接忽略这部分。
nbweb
2021-05-08 09:21:29 +08:00
@iBugOne 非常感谢。

其实我是想把美国 vps 上的博客,备份到我家里 nas 里面,在家里 nas 上的 debian 试了一下,不行。

rsync -a -e 'ssh -p 8022' --delete root@usa-vps-ip:/root/nginx-1.19.3.tar.gz /home/backup

报错如下:
root@usa-vps-ip: Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
starrycat
2021-05-08 09:48:00 +08:00
https://starrycat.me/blog-backup-rsync-migrate-google-cloud-platform.html 不过我是手动备份,自动备份可能要写个定时脚本
iBugOne
2021-05-08 14:48:10 +08:00
@nbweb 你这报错信息也太明显了吧。。。

root@usa-vps-ip: Permission denied (publickey).

自查一下
xiaoyuesanshui
2023-03-09 11:18:37 +08:00
@toaruScar 老哥,这部分可不可以仔细讲讲?或者有没有啥文档参考?
> 3 ,没有用证书登录,如何用免密码同步备份?
可以直接在 A 生成一个 rsync 专用的密钥,然后把公钥拷到 B 的 authorized_keys 里面,并用“command=”的配置把这公钥可运行的命令锁住,这样是最基本的跨 host 拷贝文件了。
toaruScar
2023-03-09 13:42:03 +08:00
xiaoyuesanshui
2023-03-16 08:45:43 +08:00
@toaruScar 老哥 我研究明白 command=这部分了。但是我每太想明白需要用 command=锁住哪些命令。我试过 command=/usr/bin/rsync 但是也不能实现同步
toaruScar
2023-03-16 23:07:26 +08:00
xiaoyuesanshui
2023-03-17 13:21:13 +08:00
@toaruScar 多谢多谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX