【问题标题】:Python, Keyring, and CronPython、密钥环和 Cron
【发布时间】:2014-01-25 13:40:16
【问题描述】:

我正在连接一个 python 脚本以使用 cron 运行(在 Ubuntu 12.04 上)——很简单。身份验证除外。

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?

【问题讨论】:

    标签: python ubuntu cron


    【解决方案1】:

    很抱歉,我没有答案,但我想根据我正在处理的问题,我知道一些正在发生的事情。我正在尝试获取一个 Web 应用程序和 cron 脚本,以使用一些代码将 Google API 的 oauth 令牌存储到使用 python-keyring 的密钥环中。

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

    我几乎可以保证您的错误源于 Gnome-Keyring 尝试启动交互式(图形)提示和轰炸,因为您无法通过 cron 执行此操作。

    【讨论】:

    • 是的!这也与我的研究一致。我从 Internet 获得了 一些 指示,表明可以将某些东西配置为跳过(#$%!图形)交互式提示,但我还没有成功管理它。到目前为止,我所拥有的最好的是我的脚本的一个受到良好保护的本地配置文件。至少可以这么说,不令人满意。
    • 我们从来没有使用我们的 Tarbell (github.com/newsapps/flask-tarbell) 库找到elections.chicagotribune.com 的解决方案,该库使用 oauth + keyring 来访问 Google 驱动器 API,所以我不得不从交互式外壳。
    • 我们目前的想法是,我们将重写部分软件,以从环境变量/命令行标志以及密钥环中获取凭据。这是安全性的降级,但在我们工作的环境中足够安全 - 如果有人可以访问我们的 crontab,即使它没有明文保存的凭据,我们也会遇到麻烦。
    【解决方案2】:

    安装钥匙串:

    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,请从包装脚本中调用它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2014-01-18
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多