问题描述
当您的计算机中有 LUKS
加密驱动器时,Nautilus
或 Nemo
会在 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
,但是有两个错误使事情变得困难。
-
您需要手动指定键名称(Seahorse:描述),因为其他应用程序使用的识别详细信息在 python 版本中不可用。我在这里创建了一个错误报告:https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781
-
在 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)
第三种思路
它有一个方便的 CLI,可在 shell 脚本中使用。
Installation
pip install keyring
设置和获取密钥
$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password