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


28

如果您LUKS的计算机中有加密的驱动器,Nautilus或者Nemo将其显示Devices为带有少许锁定的驱动器。

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

如何从终端“立即挂载”这样的驱动器,将其密码存储在密钥环中?我想要一个自动启动脚本,该脚本将在登录时挂载我的LUKS驱动器。我不想将密码存储在脚本中,我想使用来自密钥环的密码:

如果您去Passwords And Keys,那里有一堆无名的钥匙。在它们的属性中,您可以找到类似的说明gvfs-luks-uuid=xxxxxxxxxxxx以及该LUKS驱动器的密码。这就是Ubuntu所使用的。

我考虑过的一个选项是,python-gnomekeyring但是它只能获取键名和密码。我需要GUI所谓的“技术细节”来获取特定密码,uuid因为键名始终为空。

Answers:


29

您可以使用秘密工具来存储和检索来自密钥环的密码。

要存储新密码:

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

我让您检查一下钥匙圈的外观。要查找它(可以在脚本中轻松插入此命令):

secret-tool lookup drive mydrive

请注意,secret-tool的秘诀在于您不能无所事事地使用示例!
Paul Flint's

1
死链接- launchpad.net/ubuntu/+source/libsecret - TL;博士apt-get install libsecret-tools
马修

9

我认为唯一的答案是通过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命令,请告诉我们。


1
一个python3的例子?
库尔希德·阿拉姆

2

使用Python密钥环库

它具有用于shell脚本的便捷CLI。

安装

pip install keyring

设置和获取密钥

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.