rsync在使用cron执行witin expect脚本时给出错误

时间:2013-08-29 04:23:03

标签: linux cron expect rsync

这是我面临的问题。我们使用rsync将一些文件从服务器备份到远程位置。 rysnc作为服务器上的守护进程运行,我们定期从远程站点提取文件,其中rsync被设置为cron作业。

最近的安全审计显示我们正在使用未经身份验证的rsync模块,任何知道模块名称的人都可以下载共享文件。建议使用经过rsync身份验证的模块并维护一个机密文件。

为了在远程站点上传递密码交互,我使用了一个expect脚本。现在我们面临的问题是,手动执行时脚本正常工作。但是当作为作业在cron中执行时,rsync突然退出,我们在服务器端遇到以下错误。

“rsync:连接意外关闭rsync错误:rsync协议数据流错误(代码12)”

我尝试了很多在互联网上找到的解决方案,但都是徒劳的。  请建议。

此处提供了期望脚本供您参考。

#!/usr/bin/expect -f
spawn /usr/bin/rsync -ruzc *.*.*.*::rsync_module/path/to/dir /tmp/dir --timeout=55
expect {
-re "Password:" {
exp_send "******\r"
}
}
interact

2 个答案:

答案 0 :(得分:0)

虽然它不是您正在寻找的解决方案,但为什么不使用基于密钥的身份验证。您不必为此目的将密码放在脚本中。

答案 1 :(得分:0)

解决。删除了interact关键字,并将以下行添加到except脚本中。现在工作正常。

expect eof
sleep 56
exit

所以新脚本看起来像

#!/usr/bin/expect -f
spawn /usr/bin/rsync -ruzc *.*.*.*::rsync_module/path/to/dir /tmp/dir --timeout=55
expect {
-re "Password:" {
exp_send "******\r"
}
}
expect eof
sleep 56
exit