通过 ssh 设置 rsnapshot 的正确方法

For*_*ard 4 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 上将备份从服务器 B 拉到服务器 A,根据 rsnapshot 文档,这似乎是正确的方法。

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

所以:

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

问题:

在 rsnapshot 配置中,我需要说哪个用户帐户将通过 SSH 在服务器 B 上登录?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?)。

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

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

欢迎任何见解和建议!

meu*_*euh 6

您将在服务器 A 上以 root 身份运行,该服务器运行 rsnapshot,并通过 ssh-ing 连接到您backupmaker在 B 上的专用用户。通常,您会希望此用户能够 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'
Run Code Online (Sandbox Code Playgroud)

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

sudo ssh-copy-id backupmaker@B
Run Code Online (Sandbox Code Playgroud)

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

sudo ssh backupmaker@B sudo rsync --version
Run Code Online (Sandbox Code Playgroud)

在 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/
Run Code Online (Sandbox Code Playgroud)

请注意,两列由制表符分隔,而不是空格。最后一行是一个例子,说明我们将 ssh 到backupmaker@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
Run Code Online (Sandbox Code Playgroud)

这将在 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/
Run Code Online (Sandbox Code Playgroud)

在 B 上:

sh -c sudo rsync --server --sender -logDtprRe.iLsfx --numeric-ids . /home
Run Code Online (Sandbox Code Playgroud)

查找/var/log/rsnapshot日志。