Как установить и использовать gpg-agent в Windows?

Я пытаюсь начать подписывать коммиты Git. Я установил ключ GPG с keybase.io и синхронизировал его на моем локальном компьютере и на моем сервере Git. Теперь я пытаюсь решить проблему ввода ключевой фразы для каждого коммита.

PS> git commit -m "testing" --allow-empty

You need a passphrase to unlock the secret key for
user: "keybase.io/anthonymastrean <anthonymastrean@keybase.io>"
2048-bit RSA key, ID AD9184C0, created 2015-04-14 (main key ID 293FEB8B)

Enter passphrase:

Насколько я понимаю, мне нужно установить что-то вроде gpg-agent. Я на Windows 10 Pro 1803, поэтому я смотрю на Gpg4win (рекомендуется GitHub и другие). Я установил его через Chocolatey, поэтому у меня есть полная установка по умолчанию.

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

Агент gpg говорит, что работает

PS> gpg-agent
gpg-agent[4644]: gpg-agent running and available

У меня есть gpg-connect-agent, но я не знаю, что с этим делать.

PS> gpg-connect-agent.exe
> help
# NOP
# CANCEL
# OPTION
# BYE
# AUTH
# RESET
# END
# HELP
# GETEVENTCOUNTER
# ISTRUSTED <hexstring_with_fingerprint>
# HAVEKEY <hexstrings_with_keygrips>
# KEYINFO [--[ssh-]list] [--data] [--ssh-fpr] [--with-ssh] <keygrip>
# SIGKEY <hexstring_with_keygrip>
# SETKEY
# SETKEYDESC plus_percent_escaped_string
# SETHASH (--hash=<name>)|(<algonumber>) <hexstring>
# PKSIGN [<options>] [<cache_nonce>]
# PKDECRYPT [<options>]
# GENKEY [--no-protection] [--preset] [--inq-passwd]
# READKEY <hexstring_with_keygrip>
# GET_PASSPHRASE [--data] [--check] [--no-ask] [--repeat[=N]]
# PRESET_PASSPHRASE [--inquire] <string_or_keygrip> <timeout> [<hexstring>]
# CLEAR_PASSPHRASE [--mode=normal] <cache_id>
# GET_CONFIRMATION <description>
# LISTTRUSTED
# MARKTRUSTED <hexstring_with_fingerprint> <flag> <display_name>
# LEARN [--send] [--sendinfo] [--force]
# PASSWD [--cache-nonce=<c>] [--passwd-nonce=<s>] [--preset]
# INPUT
# OUTPUT
# SCD <commands to pass to the scdaemon>
# KEYWRAP_KEY [--clear] <mode>
# IMPORT_KEY [--unattended] [--force] [<cache_nonce>]
# EXPORT_KEY [--cache-nonce=<nonce>] [--openpgp] <hexstring_with_keygrip>
# DELETE_KEY [--force|--stub-only] <hexstring_with_keygrip>
# GETVAL <key>
# PUTVAL <key> [<percent_escaped_value>]
# UPDATESTARTUPTTY
# KILLAGENT
# RELOADAGENT
# GETINFO <what>
# KEYTOCARD [--force] <hexstring_with_keygrip> <serialno> <id> <timestamp>
OK

Я вижу, что на странице руководства рассказывается о том, как запустить gpg-agent в сеансе Bash, но я не уверен, как его перевести на Windows и как он работает в cmd.exe и PowerShell.

https://linux.die.net/man/1/gpg-agent

3 ответа

Решение

Мне нужно было сообщить git установленной программы gpg, которая сама знает о gpg-agent, который она должна использовать.

PS> git config --global gpg.program $(Resolve-Path (Get-Command gpg | Select-Object -Expand Source) | Select-Object -Expand Path)

После настройки этой конфигурации появится диалоговое окно "Ввод PIN-кода" для Gpg4win!

введите описание изображения здесь

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

  1. Ты можешь использовать gpgconf --launch gpg-agent заставить gpg-agent работать в фоновом режиме в Windows.

  2. Для автоматического запуска gpg-agent при входе в систему я добавляю задачу в планировщик задач:

GPG-агент-автостарт

  1. Чтобы расширить срок действия парольной фразы, добавьте эти строки в gpg-agent.conf:

    default-cache-ttl 34560000
    
    max-cache-ttl 34560000
    

Я пытался установить номер 999999999, но он не работал вообще

Вы можете найти местоположение gpg-agent.conf с помощью этой команды:

$ gpgconf.exe --list-dirs

sysconfdir:C%3a\ProgramData\GNU\etc\gnupg
bindir:C%3a\Program Files (x86)\GnuPG\bin
libexecdir:C%3a\Program Files (x86)\GnuPG\bin
libdir:C%3a\Program Files (x86)\GnuPG\lib\gnupg
datadir:C%3a\Program Files (x86)\GnuPG\share\gnupg
localedir:C%3a\Program Files (x86)\GnuPG\share\locale
socketdir:C%3a\Users\Jerry\AppData\Roaming\gnupg
dirmngr-socket:C%3a\Users\Jerry\AppData\Roaming\gnupg\S.dirmngr
agent-ssh-socket:C%3a\Users\Jerry\AppData\Roaming\gnupg\S.gpg-agent.ssh
agent-extra-socket:C%3a\Users\Jerry\AppData\Roaming\gnupg\S.gpg-agent.extra
agent-browser-socket:C%3a\Users\Jerry\AppData\Roaming\gnupg\S.gpg-agent.browser
agent-socket:C%3a\Users\Jerry\AppData\Roaming\gnupg\S.gpg-agent
homedir:C%3a\Users\Jerry\AppData\Roaming\gnupg

gpg-agent.conf находится в homedir

В дополнение к ответу Тао Чжу
вы можете указать срок действия парольной фразы (PIN) без файлов конфигурации в диспетчере ключей графического интерфейса Kleopatra , который поставляется с Gpg4win:

Проверьте это при установке Gpg4win (установщик на русском языке) :

Найдите его в меню «Пуск» и запустите.
Зайдите в меню: Настройки - Настроить Клеопатру ...

Перейти на GnuPG системы вкладки, а затем частные ключи Вкладка
значения по умолчанию Изменить Ваши для двух установок Expire cached PINs after N seconds и Set maximum PIN cache lifetime to N seconds, Я установил это:

Большие значения позволяют избежать частого и раздражающего ввода парольной фразы для ключа GPG при каждой фиксации git в течение дня (до следующей перезагрузки Windows или истечения указанного времени)

К сожалению, я еще не нашел способа запомнить парольную фразу между сессиями (перезагрузками).

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