这是我面临的问题。我们使用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
答案 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