在cron作业中通过安全的ssh使用rsync

我试图在Debian GNU / Linux下设置一个shell脚本来将目录和子目录备份到通过SSH运行Linux的远程NAS上。 这个连接必须被encryption。

我已经尝试了几种不同的方法涉及rsync rsh等,但没有运气。 我知道如何设置crontab ,但是我需要一个无人值守的脚本(即它不会要求input密码)

任何人都可以帮我吗?

编辑:我现在可以成功login没有密码。

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

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

编辑:似乎本地系统有一个/备份和一个/备份…我已经尝试/备份时,我应该使用/备份…

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

rsync自2.6.x默认使用ssh传输。 所以只要您的远程NAS rsync支持,它已经被照顾了。

至于无密码的无密码传输,请为您正在运行cron的用户设置基于ssh密钥的身份validation,这应该完成。 这是你如何设置 – http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html

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

–password文件

可以很容易地将文件chmod到400,所以除了你的用户可以读取该文件(和当然的根)

Ssh键同步你说你有这个工作,但我想我仍然会发布的步骤

ssh进入你的NAS

做钥匙

 ssh-keygen -t rsa on local machine 

然后同步到将要备份的计算机

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

Rync备份脚本 – 这将为今天做一个备份文件夹,然后sycn昨天文件,这将减lessnetworking上的负载,然后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的ready 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