Установка и настройка pinentry-mac на macOS


pinentry-mac — это графическое окно для ввода паролей GPG на macOS; без него GPG часто «молчит» или падает при запросе пароля. Ниже — пошаговая инструкция по установке с пояснением смысла каждого шага.

1. Что такое pinentry-mac и зачем он нужен

  • pinentry — это небольшая программа, с которой gpg-agent обменивается командами по простому протоколу, чтобы показать окно ввода PIN/пароля.
  • pinentry-mac — вариант pinentry с нативным Cocoa-интерфейсом под macOS, обеспечивающий привычное для системы графическое окно.

Зачем это нужно:

  • GPG сам по себе не показывает графические диалоги; за это отвечает внешняя программа pinentry, которую выбирает gpg-agent.
  • Если gpg-agent не знает, какой pinentry использовать (или использует текстовый вариант в неподходящей среде), запрос пароля может не появиться, и подпись/расшифровка будут проваливаться.

2. Установка pinentry-mac через Homebrew

Ниже предполагается, что Homebrew уже установлен. Если его нет, можно установить по инструкции из официального скрипта, но это выходит за рамки вопроса.

  1. Установите пакет:

    brew install pinentry-mac
    
  2. Убедитесь, что бинарник установлен:

    which pinentry-mac
    

Почему это важно:

  • gpg-agent требует абсолютно точный путь к программе pinentry; если путь неправильный или бинарника нет, запрос пароля не появится и операции GPG будут падать.
  • Различие директорий /usr/local и /opt/homebrew на Intel и Apple Silicon прямо отмечено в руководствах по настройке GPG на macOS.

3. Настройка gpg-agent для использования pinentry-mac

По умолчанию gpg-agent может выбирать другой pinentry (например, встроенный текстовый) или вообще не иметь корректной настройки, поэтому нужно явно указать pinentry-mac.

  1. Создайте каталог конфигурации GnuPG (если его нет):

    mkdir -p ~/.gnupg
    chmod 700 ~/.gnupg
    
  2. Создайте или отредактируйте файл ~/.gnupg/gpg-agent.conf, прописав путь к pinentry-mac. Самый надёжный способ — использовать brew --prefix:

    echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" > ~/.gnupg/gpg-agent.conf
    

    или, если хотите добавить строку, а не перезаписывать файл:

    echo "pinentry-program $(brew --prefix)/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
    
  3. Перезапустите или перезагрузите gpg-agent, чтобы он прочитал новую конфигурацию:

    gpg-connect-agent reloadagent /bye
    
  • Команда gpg-connect-agent reloadagent /bye описана в руководствах по настройке GPG на macOS как способ применить изменения gpg-agent.conf без выхода из системы.
  • Если этого не сделать, gpg-agent может продолжать использовать предыдущую конфигурацию, и новые настройки pinentry не сработают до следующего запуска агента.

Почему это важно:

  • Без pinentry-program gpg-agent может автоматически выбрать другой pinentry (например, curses-версию), что приведёт к неудобствам или ошибкам в GUI-среде macOS.
  • Явное указание пути гарантирует, что будет использоваться именно графический pinentry-mac, а не что-то ещё.

4. Проверка работы pinentry-mac

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

  1. Прямая проверка pinentry:

    echo GETPIN | pinentry-mac
    
  2. Проверка через GPG (если у вас уже есть ключ):

    echo "test" | gpg --clearsign
    

Почему это важно:

  • Проверка через echo GETPIN | pinentry рекомендована для диагностики, когда не появляется ожидаемое диалоговое окно.
  • Подпись или расшифровка — реальный сценарий использования; если здесь появляется окно pinentry-mac, значит связка gpg-agent ↔ pinentry настроена правильно.

5. Дополнительные настройки и советы

Эти пункты не обязательны, но полезны для удобства и безопасности.

  1. Интеграция с macOS Keychain:

    pinentry-mac может предложить сохранить пароль в системной связке ключей, чтобы не вводить его каждый раз при подписи/расшифровке.

  2. Использование с git commit signing:

    Многие инструкции по подписи git-коммитов на macOS включают обязательную установку pinentry-mac для корректного окна ввода пароля при git commit -S.

  3. Альтернативы и расширения:

    Существуют альтернативные реализации, например pinentry-touchid, которые используют Touch ID, но они прямо требуют установленный pinentry-mac и базовую корректную конфигурацию gpg-agent.

Если нужен пример полной конфигурации для git (gpg.program, user.signingkey и т.п.) или для работы с YubiKey, можно уточнить сценарий использования, и будут приведены отдельные короткие инструкции.