SSH自动远程备份

SSH自动远程备份

我有两台机器,A并且B。机器A可以 ssh 进入BA有很多可用空间。B的数据处于某种危险的境地。 如何自动备份所有B数据A它不必非常频繁,但应该是解放双手的。每次A启动都足够频繁。我听说同步可以做到这一点。

答案1

要在大多数 Linux 发行版中每天执行此操作,您应该能够只输入命令rsync(按照@guido 的回答)在脚本中并将脚本放入/etc/cron.daily目录中。只要anacron安装了(可能不是默认情况下),任何错过的cron.daily作业都将在下次机器启动时捕获(如果机器切换,则在午夜运行)。

对于脚本你只需执行以下操作:

#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder

-z如果备份是通过较慢的连接或者您想节省带宽,您可以添加(压缩)选项,但根据我的经验,它实际上会损害现代机器/网络的性能。

如果您想保留每个备份的日志,您可以执行以下操作:

#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
  >/var/log/backup_log 2>&1

请注意,要使其作为 cron 作业工作,您必须具有无密码 ssh设置为在 serverA 上登录到 serverB。它必须是 root 帐户(即键入/root/.ssh),因为cron.daily作业以 root 身份运行。

答案2

我建议使用rdiff 备份。我现在用它每天晚上自动增量备份我自己的数据(两个工作站、两台服务器和别人服务器上的一个帐户)。

我之前使用过 rsync,但后来改用 rdiff-backup,因为它更方便,并且可以对虚拟机磁盘映像等大文件进行增量备份。 rdiff-backup 很像我之前的 rsync 备份脚本,但是完成了正确的

我已经将脚本文件放入/etc/cron.daily在存储备份的机器上,每天凌晨启动一次rdiff-backup,并从远程机器上获取数据。

答案3

除了前面的所有答案之外,这里还有一个依赖于 SSH 密钥的答案,它限制了使用该密钥登录时可以执行的操作。

在服务器A上

在这一点上,如果您创建一个单独的用户或使用现有的用户名之一,那并不重要,但如果是我,我会创建一个单独的用户。我将bkpuser在下面的示例中使用两台服务器的用户名。

登录后bkpuser,创建一个没有密码的 SSH 密钥。

在服务器B上

启用PubkeyAuthenticationsshd_config.

创建用户bkpuser.设置一个非常复杂的密码,或者禁用该用户的密码登录(具体如何操作取决于您运行的 unix 和发行版)。重点是用户只能使用 SSH 密钥登录。确保对bkpuser要备份的所有目录和文件具有读取权限。

将 A 上创建的密钥的公共部分复制到~bkpuser/.ssh/authorized_keysB 上。编辑以在连接上自动运行命令。该命令不应该是指向 shell 脚本的指针;而是直接将 shell 脚本插入到密钥中。还包括一个限制,以便密钥只能从服务器 A 使用,而不能从其他服务器使用。在下面的示例中,我为服务器 A 提供了 IP 地址10.1.2.3,并且假设我要备份的文件都位于/data.

from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....

在服务器A上

如果您使用的是支持条目的 cron 选项卡之一,请使用命令@reboot将此类条目添加到s crontab 中。如果不允许,可以随时设置 - 如果是我的数据,我可能会每天都这样做。bkpuserssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz

答案4

您可以使用 rsync 来实现此目的(以一种相反的方式):

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

在哪里:

-avz  archive, compress and be verbose

相关内容