通过 SSH 进行远程备份

通过 SSH 进行远程备份

我有两台计算机,一台本地计算机,一台远程计算机。我想通过 ssh 使用 tar 命令备份远程服务器,但将 tar 文件保存在本地计算机上。可以吗?

答案1

以下是我所做的两个示例:一个用于文件,一个用于 MySQL。两者都是拉取解决方案;您的本地计算机登录到远程计算机并检索文件。但是,本地计算机会告诉远程计算机准备存档。

设置与背景

我使用 crontab 和无密码身份验证通过 ssh 在远程计算机上存档和 gzip,然后通过 ssh 将 gzip 的输出定向到本地计算机。确保 crontab 和无密码认证已设置。我还准备了一些清理的单行代码。

这样做的好处是可以最高效地利用带宽。缺点是资源占用较高,不过在现代硬件上,除非处理的文件非常大,否则我怀疑这无关紧要。

备份文件和目录

这可能是你关心的部分。告诉 ssh 执行 tar 并通过管道传输到 gzip远程机器让 gzip 将压缩文件写入标准输出(c标志),并将输出定向到当地的机器。

00 00 * * * /usr/bin/ssh login@host "sudo tar -cf - -C /path/to/directory/to/backup/ file_to_back_up | gzip -9c" > /file/on/local/machine/BackUp_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).tar.gz

重要提示:file_to_back_up是您实际备份的文件;它可以是文件或目录。它也可以是一系列文件:file1.txt、file2.php 等。

9标志是最大 gzip 压缩。

标志-cf -和参数创建一个新的存档并将数据吐出到标准输出。-C标志告诉 tar 从当前目录以外的其他目录开始。file_to_back_up 可以是文件或目录。这样可以将许多无关的相对路径排除在存档之外。如果您想备份主目录中的某些内容,我想您可以省略,-C /path/to/directory/to/backup/因为 ssh 默认会将您登录到主目录中。

date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A将生成一个时间戳,例如2015-03-19-08h58m09s_Thursday

crontab 列00 00 * * *基本上意味着每天的午夜。

备份 MySQL 数据库

与上述类似。需要注意的是,您需要确保您的 mysql 访问也可以无密码;安全的方法是使用 .cnf 文件。如果您不使用 MySQL,请跳过此部分,但此概念可以延续到其他工具。

30 0,13 * * * /usr/bin/ssh [email protected] "mysqldump --defaults-file=.my.database.cnf -uroot databasename | gzip -9c" > /path/to/databasebackup_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).sql.gz

.cnf 文件包含登录凭据,因此您无需通过 shell 传递它们,ps其他用户也可以看到它们。它应该包含:

[client] user=mysqluser password=yourpassword host=localhost

根据您的设置,您可能需要为不同的项目/数据库设置一组文件。如果没有,则默认使用 .my.cnf。

安全性:您可能希望chmod 600 *.cnf只有所有者可以读取和写入此文件。

清理

我倾向于使用该命令自动删除超过五天的备份find,除非它们落在星期五。我归档星期五的时间更长。这就是为什么我在文件名中包含星期几的原因。

答案2

是的,以下是一些例子:

tar cvjf - * | ssh user@host "(cd /desired/path; tar xjf -)"
tar cvzf - dir/ | ssh user@host "cat > /backup/dir.tar.gz"
tar cvzf - dir/ | ssh user@host "dd of=/backup/dir.tar.gz"
ssh user@host "cat /backup/dir.tar.gz" | tar xvzf -
tar cvjf - * | ssh root@host "(cd /desired/path; tar xjf - )"

备份远程计算机并将 tar 保存在本地计算机上

ssh user@host "(cd /desired/path; tar cvzf - *)" > /path/to/backup.tar.gz

其他用法示例:https://blog.bravi.org/?p=259

相关内容