![通过 ssh 设置 rsnapshot 的正确方法](https://linux22.com/image/99276/%E9%80%9A%E8%BF%87%20ssh%20%E8%AE%BE%E7%BD%AE%20rsnapshot%20%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95.png)
我有两台 Debian 8 服务器:
- 服务器A:在家,有大量存储空间
- 服务器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 连接到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'
(编辑 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
日志。