Гит всегда просит меня ввести кодовую фразу, чтобы разблокировать мой секретный ключ при подписании фиксации.
git commit -S -m 'message'
Как я могу хранить в кеше пароль, чтобы мне не приходилось вводить его каждый раз при подписании фиксации
Гит всегда просит меня ввести кодовую фразу, чтобы разблокировать мой секретный ключ при подписании фиксации.
git commit -S -m 'message'
Как я могу хранить в кеше пароль, чтобы мне не приходилось вводить его каждый раз при подписании фиксации
Git никогда не получит парольную фразу GnuPG. Вы должны полагаться на возможности GnuPG по кешированию парольных фраз, что происходит через gpg-agent
, которые легко настраиваются путем редактирования ~/.gnupg/gpg-agent.conf
(скрытого где-то в вашей папке AppData
в Windows).
Установите default-cache-ttl
на количество секунд, в течение которых парольная фраза кэшируется после каждого вызова GnuPG. maximum-cache-ttl
устанавливает время после первоначального ввода ключевой фразы, когда кэш стирается. Убедитесь, что ignore-cache-for-signing
не установлен - в противном случае GnuPG будет игнорировать кэш для операций подписания.
Если вы хотите подписывать коммиты без какого-либо взаимодействия с пользователем, вы можете предварительно заполнить кеш через gpg-preset-passphrase
, часто скрытый где-то в таком месте, как /usr/lib/gnupg2/gpg-preset-passphrase
; или запустив произвольную операцию дешифрования или подписи. Вы также можете настроить git на использование опции, подобной --passphrase [your passphrase]
, которая будет передана в gpg
, но ознакомьтесь с ограничениями и последствиями для безопасности этого подхода (он подразумевает, что ваша фраза-пароль хранится где-то в открытом тексте).
Полный список опций здесь.
После обновления до Ubuntu 18.04 все мои предыдущие решения больше не работали, потому что gnome-keyring
больше не реализует агент GPG, и я не мог заставить gpg-agent
кэшировать любую фразу-пароль.
Вот решение, которое наконец-то сработало для меня:
Создайте сценарий gpg-without-tty
:
#!/bin/bash
echo $(secret-tool lookup gpgpassphrase $GPGKEY) | /usr/bin/gpg --batch \
--no-tty --pinentry-mode loopback --passphrase-fd 0 "[email protected]"
Установите пароль для $ GPGKEY в gnome-keyring:
secret-tool store --label='Passphrase for GPG Key' gpgpassphrase $GPGKEY
Скажите git использовать скрипт gpg-without-tty
:
git config --global gpg.program /path/to/gpg-without-tty
Возможно, вам также придется добавить настройку allow-loopback-pinentry
в ~/.gnupg/gpg-agent.conf
.
Обновление: Хотя это работало локально, оказалось, что оно каким-то образом испортило подписи: оно подписало коммиты с полным 40-символьным отпечатком. GitHub не признал эти подписи действительными. И когда я смотрел старые коммиты, которые я подписал перед обновлением до 18.04 (git log --show-signature
), они больше не показывались как действительные. В итоге я удалил настройку gpg.program
в конфиге git. Оказывается, проблемы, с которыми я столкнулся, были, вероятно, связаны с тем, чтобы этот параметр был в первую очередь (который я использовал в прошлом, чтобы обойти другую проблему).
Короче говоря, запуск git config --global --unset gpg.program
стал ответом на мои проблемы после обновления.
Если вы действительно не хотите или не должны подписывать каждое сообщение, вы можете отключить подписку по умолчанию, выполнив:
git config --global commit.gpgsign false
Если вы хотите подписать коммит, вы можете сделать это, используя флаг -S. Как это..
git commit -S -m your commit message
Просто сделал мою жизнь проще!