Как мне получить пароли от связки ключей в терминале для использования в скриптах?

28

Если у вас есть LUKSзашифрованный диск на вашем компьютере, Nautilusили вы Nemoувидите его Devicesкак диск с небольшой блокировкой на нем.

Когда вы нажимаете на нее, вам нужно ввести пароль. Если вы решите remember this password forever, он будет сохранен в вашем связке ключей. При следующей загрузке нажатие на диск сразу же смонтирует его.

Как «немедленно смонтировать» такой терминал, для которого пароль хранится в связке ключей, из терминала? Я хочу иметь сценарий автозапуска, который будет монтировать мой диск LUKS при входе в систему. Я не хочу сохранять свою фразу-пароль в сценарии, я хочу использовать фразу-пароль из набора ключей:

Если вы идете Passwords And Keys, есть куча безымянных ключей. В их свойствах вы можете найти описание, gvfs-luks-uuid=xxxxxxxxxxxxа также пароль для этого диска LUKS. Это то, что использует Ubuntu.

Один из вариантов, о котором я подумал, - python-gnomekeyringно он может получить только имя и пароль. Мне нужно то, что GUI называет «техническими uuidдеталями », чтобы получить пароль для конкретного, потому что имя ключа всегда пусто.

Redsandro
источник

Ответы:

29

Вы можете использовать секретные инструменты для хранения и восстановления пароля из набора ключей.

Чтобы сохранить новый пароль:

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

Я позволю вам проверить, как это выглядит. Чтобы найти его (эту команду легко вставить в ваш скрипт):

secret-tool lookup drive mydrive
Орельен
источник
Обратите внимание, что секрет secret-tool заключается в том, что вы не можете быть пользователем root для работы с примерами!
Пол Флинт
1
Мертвая ссылка - launchpad.net/ubuntu/+source/libsecret - tl; drapt-get install libsecret-tools
Мэтью
9

Я думаю, что единственный ответ до конца python, но есть две ошибки, которые усложняют ситуацию.

  1. Вам необходимо вручную дать имена ваших ключей (Seahorse: Описания), потому что идентифицирующие детали, которые используют другие приложения, недоступны в версии Python. Я создал отчет об ошибке здесь: https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781
  2. Эти описания являются пустыми в Seahorse в конкретном случае ключей LUKS, но изменение пустого описания фактически меняет имя ключа, так что вы можете искать его в 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, пожалуйста, сообщите нам об этом.

Redsandro
источник
1
Пример Python3?
Хуршид Алам
2

Используйте Python Keyring Lib

Имеет удобный CLI для использования в скриптах оболочки.

Установка

pip install keyring

Установка и получение ключей

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
HarlemSquirrel
источник