0

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

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

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

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

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

此处给出expect 脚本供您参考。

#!/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
4

2 回答 2

0

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

于 2013-08-29T04:55:49.540 回答
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
于 2013-09-02T06:29:48.313 回答