GnuPG pinentry в зависимости от наличия GUI

На MacOSX я использую gnupg21 чтобы подписать git commit, В зависимости от проекта, в настоящее время я работаю, иногда я использую IDE (здесь IntellijIDEA) взаимодействовать с git а иногда прямо в terminal,

Я должен был настроить

pinentry-program /usr/local/bin/pinentry-mac

чтобы иметь возможность продолжить работу над IntellijIDEA,

Тем не менее, я не очень люблю подсказывать GUI, когда использую terminal, Как вы думаете, возможно ли настроить gnupg21 выбирать pinentry программа относительно ситуации?

  • На GUI -> /usr/local/bin/pinentry-mac
  • На терминале -> /usr/local/bin/pinentry

Изменить: мои текущие файлы конфигурации

GPG-agent.conf

enable-ssh-support
default-cache-ttl 14400
max-cache-ttl 86400
log-file /var/log/gpg-agent.log
pinentry-program /usr/local/bin/pinentry-mac

gpg.conf

keyserver hkp://keys.gnupg.net
no-tty
use-agent

2 ответа

Решение

Запуск нескольких gpg-agents

GnuPG-х gpg-agent может быть настроен на использование разных сокетов до GnuPG 2.1; Вы могли бы использовать разные gpg-agentработает параллельно с другой конфигурацией (реализациями).

С GnuPG 2.1 это больше не возможно. GnuPG начиная с 2.1 всегда использует фиксированный путь к сокету.

Пинентри Переключение

Единственная чистая возможность включить такую ​​функцию - это, вероятно, написать реализацию коммутатора пинентри, решив, какой фактический пинентри вызывать в зависимости от того, вызывается ли из командной строки или из графического интерфейса пользователя (например, в зависимости от того, что DISPLAY или же tty переменные установлены).

Loopback Pinentry Mode

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

В любом случае, добавьте строку allow-loopback-pinentry в ~/.gnupg/gpg-agent.conf, killall gpg-agent (поэтому он перезапускается с включенной опцией в следующий раз, когда GnuPG захочет его использовать). Если вы хотите использовать графический интерфейс пользователя, запустите GnuPG как обычно; для операций командной строки, позвоните gpg21 --pinentry-mode loopback вместо этого (который, конечно, может быть псевдонимом для gpg21).

Извините за поздний ответ, но у меня был тот же вопрос, и я нашел решение, которое кажется чище, чем изменение pinentry-program настройка и перезапуск gpg-agent каждый раз.

Хотя это не задокументировано нигде, кроме источника, pinentry-mac будет возвращаться к методу ввода ПИН curses, если PINENTRY_USER_DATA переменная окружения установлена ​​в USE_CURSES=1, Вы можете оставить pinentry-mac по умолчанию в вашем gpg-agent.conf и шлепать:

export PINENTRY_USER_DATA="USE_CURSES=1"

в вашем профиле Bash или эквивалент.

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