强化 rsync 备份中使用的authorized_keys

问题描述

  • 我正在尝试从 ServerAServerB 进行 rootfs 备份。
  • 连接是一种方式,使用 ServerBrsnapshot 初始化。
  • 我已经在 backup 上创建了一个 ServerA 帐户,并且仅为 rsync 启用了无密码 sudo

我想要实现的目标:

  • 更改 authorized_keys 上的 ServerA 文件,因此只能通过 ssh 使用 rsync 命令。

ServerB - /etc/rsnapshot.conf 设置为使用以下参数运行 rsync

  • rsync_long_args --rsync-path="sudo rsync" --delete --numeric-ids --relative --delete-excluded

我在 ServerA 上尝试了以下操作:

  • from="ServerB",command="sudo rsync *" ssh-ed25519 SSH-KEY

但是 rsnapshot 不断崩溃并给出 rsync 的 IO 错误代码

在这里遗漏了什么?

解决方法

!!问题解决了!!

发现rrsync --- /usr/share/doc/rsync/scripts/rrsync,复制到任何地方。

  • ServerA:authorized_keys --- command="sudo /usr/local/bin/rrsync -ro /backup"

由于我在 ServerA 上保留备份的副本,我不妨从它们进行 rsync,而不是在 ServerB 上使用 rsnapshot。 (这是我最初的想法,但它不起作用,因为 rsnapshot 创建的链接导致重复文件,我最终让 rsnapshot 在 ServerAServerB 上运行,以保存来自 { {1}} 到 ServerA 上的 localDir,还制作从 ServerAServerA 的远程快照。)

  • 还更改了 ServerB 上的 sudoers 文件:
ServerA
  • Defaults!/usr/local/bin/rrsync env_keep += "SSH_ORIGINAL_COMMAND" backup ALL = (root) NOPASSWD: /usr/local/bin/rrsync

现在按预期工作。

请注意,上面命令中 rsync -ax --delete --numeric-ids --relative ServerA:/ /ServerB-backup/ 上的路径是相对于authorized_keys 中设置的规则。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...