LUKS
当您的计算机中有一个加密驱动器时,Nautilus
它Nemo
会显示Devices
为一个带有小锁的驱动器。
单击它时,您需要输入密码。如果您选择remember this password forever
,它将保存到您的密钥环中。下次启动时,单击驱动器将立即安装它。
如何从终端“立即挂载”这样的驱动器,其密码存储在密钥环中?我想要一个自动启动脚本,当我登录时,它将挂载我的 LUKS 驱动器。我不想将密码存储在脚本中,我想使用密钥环中的密码:
如果您访问Passwords And Keys
,就会看到一堆匿名密钥。在它们的属性中,您可以找到类似 的描述,gvfs-luks-uuid=xxxxxxxxxxxx
以及该 LUKS 驱动器的密码。这就是 Ubuntu 使用的。
我想到的一个选项是,python-gnomekeyring
但它只能获取密钥名称和密码。我需要 GUI 所称的“技术细节”来获取特定密码,uuid
因为密钥名称始终为空。
答案1
您可以使用秘密工具从密钥环存储和检索密码。
要存储新密码:
secret-tool store --label='Password for mydrive' drive mydrive
我让你检查密钥环中它是如何显示的。要查找它(此命令可以轻松插入到你的脚本中):
secret-tool lookup drive mydrive
答案2
我认为唯一的答案是通过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)
答案3
它有一个方便的 CLI,可用于 shell 脚本。
安装
pip install keyring
设置和获取密钥
$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
答案4
这是精制我读完这里后得到的答案是,那里和测试lssecret
:
$ secret-tool lookup xdg:schema org.gnome.GVfs.Luks.Password gvfs-luks-uuid {uuid}
asupersecretpassword
这将为你获取具有给定 UUID 的设备的 LUKS 密码。使用 libsecret v0.21.1。