Как мне заставить агента GPG кэшировать мой пароль?

21

Я разработчик, и я обычно подписываю свои коммиты Git своим ключом GPG. Я смог заставить GPG Agent работать должным образом на OSX, так что он запрашивает мой пароль только один раз в день, но у меня возникают проблемы с тем, чтобы то же самое работало на Ubuntu 16.04.

Вот что я делаю:

  • Я установил свои ключи GPG / и т. Д.
  • Я в каталоге Git.
  • Я добавляю несколько файлов в Git.
  • Затем я иду, чтобы зафиксировать их ( git commit), и получить запрос пароля GPG, который выглядит следующим образом:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <r@rdegges.com>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

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

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

Я прочитал тонны документации и сообщений в блоге, и вот что я попробовал до сих пор ...

Сначала я изменил свой ~/.zshrcфайл (я использую zsh), чтобы установить следующее:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

Теперь, из того, что я прочитал, одно это должно сработать после перезапуска gpg-agent, но это не так.

Итак, следующее, что я сделал, я определил ~/.gnupg/gpg-agent.confфайл, как описано на man gpg-agentстранице:

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

Это также не имеет никакого эффекта.

Я также пробовал различные методы блога и т. Д., Но, похоже, ничего не работает. Может ли кто-нибудь дать мне несколько советов о вещах, которые я могу упустить?

rdegges
источник

Ответы:

24

В дополнение к настройке времени кэширования gpg-agent.conf, вы также должны убедиться, что GnuPG действительно взаимодействует с gpg-agent. GnuPG 2 и выше обычно это делает, а ветка GnuPG 1 - нет. По умолчанию git использует gpgдвоичный файл, который (на момент написания этого ответа) по-прежнему был GnuPG 1, тогда как GnuPG 2 установлен, как и gpg2на большинстве систем.

В конце концов, у вас есть две возможности:

Йенс Эрат
источник
0

В дополнение к ответу выше, вы также можете просто изменить значение по умолчанию gpgв вашей системе, gpg2а не gpg1.

Если git config --global gpg.program gpg2у вас работает, но вы не хотите оставлять это в своем git config (в моем случае, потому что я использую ту же конфигурацию в macOS), тогда вы можете просто поменять значение по умолчанию gpg.

Я следовал за руководством здесь , которое было просто:

$ sudo mv /usr/bin/gpg /usr/bin/gpg1
$ sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

Это делает gpg1старый gpgдвоичный файл и символические ссылки /usr/bin/gpg -> /usr/bin/gpg2(с именем gnupg и приоритетом 50).

Изменение значения по умолчанию gpgтеоретически может сломать некоторые пакеты в вашей системе, но Debian Stretch (текущая стабильная версия Debian) устанавливает gpg2значение по умолчаниюgpg аналогичным образом, поэтому у вас не должно быть слишком много проблем.

контрклин
источник