在 cron 任务中通过安全 ssh 使用 rsync

在 cron 任务中通过安全 ssh 使用 rsync

我正在尝试在 Debian GNU/Linux 下设置一个 shell 脚本,以通过 SSH 将目录和子目录备份到运行 Linux 的远程 NAS。此连接必须加密。

我尝试了几种不同的方法,包括rsync rsh和 等,但都没有成功。我知道如何设置crontab,但我需要一个可以无人值守运行的脚本(即它不会要求输入密码)

有人能帮助我吗?

编辑:我现在可以无需密码成功登录。

现在的问题是让 rsync 将文件复制/backups/[remote system]:/backups/

它仅将一个文件夹从/backups/复制到[remote system]:/backups/

编辑:似乎本地系统有一个 /backups 和一个 /backup...我尝试使用 /backups,而我应该使用 /backup...

最终命令:rsync -avzr -e ssh /backup/ admin@[IP]:/backups/

答案1

自 2.6.x 起,rsync 默认使用 ssh 进行传输。因此,只要您的远程 NAS rsync 受支持,它就已经被处理好了。

至于无需密码的无人值守传输,请为运行 cron 的用户设置基于 ssh 密钥的身份验证,然后就可以了。设置方法如下 --http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html

答案2

您还可以将此标志传递给 rsync 以使用文件作为密码:

--密码文件

可以轻松地将文件的 chmod 设置为 400,这样除了您的用户(当然还有 root)之外,没有人可以读取该文件

答案3

Ssh Key 同步你说你已经成功了,但我想我还是会发布这些步骤

ssh 进入你的 NAS

制作钥匙

ssh-keygen -t rsa on local machine 

然后同步到您要备份的电脑

cat ~/.ssh/id_rsa.pub | ssh user@hostname    ‘cat>>.ssh/authorized_keys’

Rync 备份脚本 - 这将为今天创建一个备份文件夹,然后今天同步昨天的文件,这将减少网络负载,然后它将 rsync 今天进行备份。

#!/bin/sh

mkdir -p /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username

rsync -avz /storage/backups/`date --date=yesterday +\%Y-\%m-\%d`-`date--date=yesterday    +\%A`/$host/$username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/

rsync -avz -e ssh  /home/username/ /storage/backups/`date +\%Y-\%m-\%d`-`date +\%A`/$host/$username/

您还需要一个脚本来清理备份:这将保留一周的备份,我可以确认这在 Netgear 的现成 nas 上有效

#!/bin/sh

# Definitions
sevendaysago=$(date --date='6 days ago' +%Y-%m-%d-%A)

# Delete backups from 7 days ago
rm -rf /storage/backups/$sevendaysago

您需要运行这个才能使脚本可运行

chmod u+x script.sh

在 cron 中你只需要通过 crontab -e 添加

@daily sh backupscript
1 17 * * * sh dailycleanup

相关内容