Python,Keyring和Cron

时间:2014-01-07 18:23:04

标签: python ubuntu cron

我正在使用cron(在Ubuntu 12.04上)运行python脚本 - 很简单。除了身份验证。

cron脚本访问几个服务,并且必须提供凭据。使用keyring存储这些凭据很容易 - 除了当cron作业实际运行时,无法检索凭据。脚本每次都失败了。

就我所知,这与cron运行的环境有关。我追踪了一组帖子,表明关键是脚本导出DBUS_SESSION_BUS_ADDRESS。一切都很好 - 我可以很容易地获得该地址并将其导出并从Python中获取 - 但它只会生成一个新错误:Unable to autolaunch a dbus-daemon without a $DISPLAY for X11。设置DISPLAY=:0无效。

因此。有没有人想出如何从在Ubuntu 12.04上的cron作业上运行的Python解锁gnome-keyring?

2 个答案:

答案 0 :(得分:2)

我很遗憾地说我没有答案,但我想我知道一些基于我正在处理的问题的事情。我尝试使用Web应用程序和cron脚本来使用一些代码,这些代码使用python-keyring将Google的oauth令牌存储到密钥环中。

无论我做什么,Web应用程序和cron作业运行的环境都需要手动干预来解锁密钥环。当您的代码在非交互式会话中运行时,这是非常不可能的。在尝试我的研究中提出的一些技巧时,问题仍然存在,例如向进程所有者提供与密钥环密码匹配的登录密码,并将密钥环密码设置为空字符串。

我几乎可以保证你的错误源于Gnome-Keyring试图启动交互式(图形)提示和轰炸,因为你无法从cron那里做到这一点。

答案 1 :(得分:0)

安装钥匙串:

sudo apt-get install keychain

将它放入$ HOME / .bash_profile:

if [ -z "$SSH_AUTH_SOCK" ] ; then
  eval `ssh-agent -s`
fi
eval `keychain --eval id_rsa`

首次登录时会询问您的密码,并会在下次重启之前存储您的凭据。

将其插入cron脚本的开头:

source $HOME/.keychain/${HOSTNAME}-sh

如果您使用其他语言,例如python,请从包装器脚本调用它。

它对我有用,我希望它对你也有帮助。