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

Red*_*dro 38 command-line keyrings mount password luks

当您LUKS的计算机中有加密驱动器时,Nautilus或者Nemo将其显示Devices为带有小锁的驱动器。

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

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

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

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

Aur*_*ien 41

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

要存储新密码:

secret-tool store --label='Password for mydrive' drive mydrive
Run Code Online (Sandbox Code Playgroud)

我让你检查钥匙圈的外观。查找它(这个命令可以很容易地插入到你的脚本中):

secret-tool lookup drive mydrive
Run Code Online (Sandbox Code Playgroud)

  • `secret-tools` 不是键值工具吗?看到`--label`选项是强制性的,为什么我需要一个值的三个键?我只是像这样保存了我的值:`secret-tool store --label=my_key my_key my_key` 并且它有效,但这非常奇怪 (2认同)

Red*_*dro 10

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

  1. 您需要手动提供您的密钥名称(海马:描述),因为在 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()
Run Code Online (Sandbox Code Playgroud)

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

  • 一个python3的例子? (3认同)

Har*_*rel 7

使用Python 钥匙圈库

它有一个方便的 CLI 可用于 shell 脚本。

安装

pip install keyring
Run Code Online (Sandbox Code Playgroud)

设置和获取密钥

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
Run Code Online (Sandbox Code Playgroud)