通过 ssh 设置 rsnapshot 的正确方法

通过 ssh 设置 rsnapshot 的正确方法

我有两台 Debian 8 服务器:

  1. 服务器A:在家,有大量存储空间
  2. 服务器B:商业主机上的vps,运行网络和邮件服务

两者都是宠物项目,而不是商业项目。

服务器 B 运行 rsnapshot,工作正常。服务器 A 和 B 可以使用证书无密码地通过 SSH 相互连接,这也可以正常工作。他们不允许 root 直接通过 SSH 连接,但他们有常规用户帐户,可以通过 sudo su 成为 root。对于非自动 SSH 会话,我使用受密码保护的证书。

最近几天,我一直尝试在服务器 B 上设置 rsnapshot 以创建从服务器 B 到服务器 A 的备份,或在服务器 A 上设置 rsnapshot 以将备份从服务器 B 拉到服务器 A,根据 rsnapshot 文档,这似乎是正确的方法。

我的问题是,很多文档相对地提到了服务器,例如他们说“在服务器上执行 x”或“将 y 复制到 ~/somepath”。我很少找到明确列出哪个服务器具有哪些功能以及需要将 y 复制到哪个用户的主目录的文档。

所以:

  • 需要备份的生产数据在服务器B上。
  • 备份需要保存到服务器A。
  • 服务器 A 将运行 rsnapshot。

问题:

在 rsnapshot 配置中,我需要指定哪个用户帐户将通过服务器 B 上的 SSH 登录? root(变得复杂或不安全)或专用的常规用户帐户,例如名为“backupmaker”的用户(Debian 有一个名为“backup”的系统用户,这是合格的,但我不想搞乱)。

我读过这两本,并且理解 Linux 的口头禅:更多的方法可以更好,但我真的在寻找在生产环境中设置了此设置的人的一些实用建议,最好是 /etc/rsnapshot.conf 和 / 中的相关行home//.ssh/authorized_keys (您真的使用 from="abcd",command="/home/remoteuser/cron/validate-rsync" 吗?“validate-rsync”脚本是必需的还是可以是任何命令,例如/home/serverAuser/myrsnapscript.sh?)。

您是否使用根帐户在服务器 B 上创建备份、常规用户帐户、自定义专用帐户或内置“备份”帐户?

我不是在寻找 sshfs 或其他替代品;我想正确地做到这一点,也许稍后将其扩展到集线器备份系统。

欢迎任何见解和建议!

答案1

您将以 root 身份在服务器 A 上运行,该服务器运行 rsnapshot,并通过 ssh 连接到backupmakerB 上的专用用户。通常,您会希望该用户能够 sudo rsync,以便您可以读取所有要发回的文件到 A。

例如,假设您在 A 上有一个可以使用 sudo 的用户,在 B 上有另一个可以使用 sudo 的用户。在 B 上创建用户backupmaker并为其指定密码。在 B 上创建一个 sudoers 条目,以便在没有密码的情况下运行 rsync,例如:

sudo tee /etc/sudoers.d/backupmaker <<<'backupmaker ALL = (root) NOPASSWD: /usr/bin/rsync'

(编辑 sudoers 文件时要小心。始终确保您在某个地方有 root 登录名以进行恢复)。在 A 上,从您的用户帐户将 root 的 ssh 密钥复制到此新用户:

sudo ssh-copy-id backupmaker@B

(如果您还没有设置根密钥,请使用sudo ssh-keygen -q -N ''A 来创建它们)。在 A 上,测试 root 可以在没有密码的情况下 ssh 到 B,并通过 sudo 进行 rsync:

sudo ssh backupmaker@B sudo rsync --version

例如,在 A configure 上/etc/rsnapshot.conf,删除现有backup行并在末尾添加

verbose     3
cmd_ssh     /usr/bin/ssh
rsync_long_args     --rsync-path="sudo rsync" --delete --numeric-ids --relative --delete-excluded
backup  backupmaker@B:/home/    mybackupofB/

请注意,这两列是用制表符分隔的,而不是空格。最后一行是一个示例,说明我们将 ssh 到 Abackupmaker@B并复制/home回 A /.snapshots/hourly.0/mybackupofB/。请注意,rsync_long_args有一个选项--rsync-path="sudo rsync",这意味着在 B 上运行的命令将不是 rsync,而是sudo rsync。首先,使用一个小目录而不是整个 /home 进行备份。您可能还想更改 A 上备份的默认位置 /.snapshots

您现在可以在 A 上尝试第一个快照。

sudo rsnapshot -vvv hourly

这将在 A 上运行命令:

/usr/bin/ssh -l backupmaker B sudo rsync --server --sender -logDtprRe.iLsfx --numeric-ids . /home
/usr/bin/rsync -a --rsync-path='sudo rsync' --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh backupmaker@B:/home /.snapshots/hourly.0/backupmaker/

在 B 上:

sh -c sudo rsync --server --sender -logDtprRe.iLsfx --numeric-ids . /home

查找/var/log/rsnapshot日志。

相关内容