![在 cron 任务中通过安全 ssh 使用 rsync](https://linux22.com/image/593912/%E5%9C%A8%20cron%20%E4%BB%BB%E5%8A%A1%E4%B8%AD%E9%80%9A%E8%BF%87%E5%AE%89%E5%85%A8%20ssh%20%E4%BD%BF%E7%94%A8%20rsync.png)
我正在尝试在 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