Python 2.X автоматизированное взаимодействие с GPG 2.0 и 2.2 для паролей и данных с кэшированием gpg-agent - PullRequest
0 голосов
/ 27 марта 2019

Требуется программный доступ vi. Python для создания файла, зашифрованного двумя версиями GPG (одна поддерживает --pinentry-mode), последующего обновления частей этого файла и предоставления пароля, когда агент не имеет его.

Смешанная среда ОС (OSX, Solaris, Linux).Нужно кодировать его с помощью stdlib.Для gpg2 в CentOS 7 в документах упоминается петля --pinentry-mode, но этот аргумент не поддерживается.

OS X gpg 2.2.10.(поддерживает --pinentry-mode loopback) Linux gpg 2.0.22 Solaris gpg 2.0.27

Я пробовал различные решения, такие как это: Шифрование файла с GPG в Python 3 с подпроцессом

но они предполагают, что пароль всегда вводится, и пропускают агента.Я пишу код с наименьшим общим знаменателем, поскольку есть ряд машин, на которых я не могу установить Python 3 разумным способом.

У меня есть код, который отлично работает во всех системах с pinentry для создания и доступа к файлу, но мне нужно добавить функциональность через stdin и stdout в CLI, чтобы предлагать пользователям обновления для частей файла и pinentryшланги этого взаимодействия.

Для этого он просто запускает: s, o = commands.getstatusoutput (gpgcmd).

У меня есть другая автоматизация, которая читает файл с использованием кэшированных учетных данных.

Но, усилияиспользовать подпроцесс. Открывайте это так: как в Зашифруйте файл с GPG в Python 3 с подпроцессом

, либо всегда ожидайте пароль, либо в конечном итоге смешайте пинентри с пользовательским вводом-выводом.

Ожидается, что пользователь сможет создавать зашифрованный файл и запрашивать разделы.Если gpg нужен пароль, мы запрашиваем у пользователя и предоставляем его.gpg автоматически запускает агент и кэширует учетные данные для времени ttl, установленного в $ HOME / .gpg-agent.conf

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

Позже, еслиПользователь должен обновить раздел в файле, запросить у них разделы и обновить файл.Если агент имеет пароль, используйте его.Если он не запрашивает пользователя, и агент должен кешировать это.

...