如何在虚拟环境中将 GNOME Keyring 与 Python Keyring 一起使用?

如何在虚拟环境中将 GNOME Keyring 与 Python Keyring 一起使用?

我编写了一个 Python 脚本,希望在我的 Raspberry Pi 上在后台运行。该脚本使用 Python 模块Keyring(关联),用于访问密钥环后端以向脚本提供密码输入。

我在 OS X 中编写了脚本,其中 Keyring使用了 OS X 钥匙串。但在不使用的无头 Raspberry Pi 上X11GNOME Keychain必须安装类似的东西才能充当后端。

我已阅读 Pypi 说明(如下引用),但我不熟悉D-Bus以及如何使其在实践中发挥作用。是否有人愿意提供一个实际的例子来说明如何处理D-bus以及如何GNOME Keyring处理Raspbian,假设:

  • 只要 Raspberry 开机,该脚本就应始终在后台运行,并通过crontab.
  • 该脚本应在安装virtualenv了该Keyring 模块的环境中运行。
  • GNOME Keyring/的处理D-Bus session尽可能自动处理,并且可以在无需用户输入的情况下向脚本提供密钥环条目(例如,当 Raspberry 开机或执行脚本时自动加载)。

https://pypi.python.org/pypi/keyring#using-keyring-on-headless-linux-systems

在无头 Linux 系统上使用密钥环

可以在没有可用 X11 服务器的 Linux 系统上使用 SecretService 后端(仅需要 D-Bus)。为此,您需要以下内容:

安装 GNOME 密钥环守护程序。(注:我已经通过 完成了此操作apt-get)。

启动 D-Bus 会话,例如dbus-run-session -- sh在该 shell 内运行并运行以下命令。

gnome-keyring-daemon使用选项运行--unlock。该选项的描述如下:

从标准输入读取密码,并使用它来解锁登录密钥环,或者在登录密钥环不存在时创建它。

当该命令启动时,在 stdin 中输入您的密码,然后按 Ctrl+ D(数据结束)。之后,守护进程将分叉到后台(使用--foreground选项来防止这种情况)。

现在您可以使用 Keyring 的 SecretService 后端。请记住在与守护程序相同的 D-Bus 会话中运行应用程序。

答案1

您仍然需要按照说明进行操作并启动并运行所需的上下文。这通常在登录图形 shell 时完成,但由于您使用无头系统,因此必须创建环境。

这意味着您要么登录(使用ssh)并按照“在无头 Linux 系统上使用密钥环”中指定的方式从命令行运行程序,然后启动您自己的程序,要么创建一个执行所有这些操作的脚本。

如果您的程序要从 crontab 启动,那么第二个选项(制作一个执行所有必需操作的脚本,然后启动您的 Python 程序)是最佳选择。

请注意,从 cron 运行脚本时的环境是不同的,包括搜索命令的非常受限的 PATH。

/path/to/your/virtualenv/bin/python setup.py install如果您的程序作为包入口点安装(即您这样做了),则从 virtualenv 运行是自动的。如果您没有将程序放入包中,则只需将其启动为:

/path/to/your/virtualenv/bin/python /path/to/your/main/python/prog.py

实际使用 virtualenv 中安装的所有软件包。

您应该能够执行 python 程序中指定的步骤,但这与描述不同(假设您有一个 shell)。因此,除非您在这些问题上有经验,否则我会坚持制作一个执行这些步骤的 shell 脚本,然后调用您的 python 程序。

相关内容