Python-gnupg не может найти секретный ключ

У меня есть сервер Ubuntu 20.04. На сервере я запускаю скрипт Python для расшифровки некоторых зашифрованных файлов PGP. Я добавил ключи PGP в связку ключей и могу расшифровать файл с помощью командной строки:

      gpg --output test.zip --decrypt myfile.pgp

Сценарий Python использует python-gnupg. Пожалуйста, смотрите ниже мой отрывок.

      import gnupg
gpg = gnupg.GPG(gpgbinary='/usr/bin/gpg')       
stream = open('myfile.pgp', "rb")
data = gpg.decrypt_file(stream, output=f'output.zip') 
print(data.status)

Проблема в том, что когда я запускаю этот код Python, закрытый ключ не может быть найден.data.status возвращает «нет секретного ключа». Однако, если я запускаю код вскоре после запуска расшифровки командной строки - расшифровка работает - data.status возвращает "расшифровка в порядке"

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

Я попытался указать каталог для ключа в сценарии Python, но это не имело значения.

Когда я запускаю с verbose=True, ошибка, похоже, связана со следующим:

      gpg: public key decryption failed: Inappropriate ioctl for device 

Любая помощь приветствуется

1 ответ

Когда вы пытаетесь расшифровать данные, GPG должен запросить парольную фразу для вашего закрытого ключа. Похоже, что это не удается. Это, вероятно, работает после запуска командной строки, потому что естьgpg-agentили другой запущенный процесс цепочки ключей, который кэширует расшифрованный ключ на некоторый период времени.

Как gpg обычно запрашивает парольную фразу? Если он настроен на использование терминала по умолчанию, вы можете настроить его на использование приглашения графического интерфейса (например,pinentry-gnome3). О настройке механизма pinentry можно прочитать здесь.

Другие вопросы по тегам