当前位置: 首页>>技术教程>>正文


如何从终端中的密钥环获取密码以便在脚本中使用?

, , , ,

问题描述

当您的计算机中有 LUKS 加密驱动器时,NautilusNemo 会在 Devices 下将其显示为带有小锁的驱动器。

当您点击它时,您需要输入密码。如果您选择 remember this password forever ,它将保存到您的密钥环中。下次启动时,单击驱动器将立即安装它。

我如何从终端’immediately mount’这样一个密码存储在密钥环中的驱动器?我想要一个自动启动脚本,在登录时挂载我的 LUKS 驱动器。我不想在脚本中存储我的密码,我想使用密钥环中的密码:

如果你去 Passwords And Keys ,那里有一堆无名的键。在它们的属性中,您可以找到 gvfs-luks-uuid=xxxxxxxxxxxx 等描述以及该 LUKS 驱动器的密码。 Ubuntu 使用的就是这个。

我想到的一个选项是 python-gnomekeyring 但它只能获取密钥名和密码。我需要 GUI 调用的 ‘Technical Details’ 来获取特定 uuid 的密码,因为键名始终为空。

最佳思路

您可以使用 secret-tools 来存储和检索密钥环中的密码。

要存储新密码:

secret-tool store --label='Password for mydrive' drive mydrive

我让你检查一下钥匙圈的外观。要查找它(可以轻松地将这个命令插入到您的脚本中):

secret-tool lookup drive mydrive

次佳思路

我认为唯一的答案是通过 python ,但是有两个错误使事情变得困难。

  1. 您需要手动指定键名称(Seahorse:描述),因为其他应用程序使用的识别详细信息在 python 版本中不可用。我在这里创建了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781

  2. 在 LUKS 键的特定情况下,这些描述在 Seahorse 中为空,但更改空描述实际上会更改键名称,因此您可以在 python 中查找它。我在这里创建了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/1144703

如果您正在使用脚本和密钥环,请提及这些错误也会影响您。

至于python部分,这里是一个例子:

#!/usr/bin/env python

import gnomekeyring as gk

keyring = 'login'
keyItems = gk.list_item_ids_sync(keyring)

for keyItem in keyItems:
    key = gk.item_get_info_sync(keyring, keyItem)
    if  key.get_display_name() == 'KeyName you are looking for':
        # Your script here using key.get_secret()
        print "Password:", key.get_secret()

如果您知道任何其他方式,例如通过简单的 bash 命令,请告诉我们。

2019年更新:

#!/usr/bin/env python

import keyring
from vsgui import api

keyring = 'login'
keyname = 'key you are looking for'

# Get key
key = keyring.get_password(keyring, keyname)

# Store key
while not key:
    key = api.ask_passwd(keyname)
    if key:
        keyring.set_password('login', keyname, key)

第三种思路

使用Python Keyring Lib

它有一个方便的 CLI,可在 shell 脚本中使用。

Installation

pip install keyring

设置和获取密钥

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14089.html,未经允许,请勿转载。