Кэшировать все пароли для gpg сразу? Предотвратить необходимость многократного ввода пароля gpg?

10

Могу ли я один раз ввести свой пароль gpg и разблокировать все мои дополнительные ключи (подпись, расшифровка, аутентификация)?

На данный момент мне нужно ввести свой пароль gpg три раза (для подписи, для расшифровки, для аутентификации). Это неудобно.

Я попытался придумать сценарий оболочки.

#!/bin/bash
set -x
set -e
set +o history

signing_key=77BB3C48
encryption_key=CE998547

tempfile="$(mktemp)"
echo "test" > testfile

unset passphrase || exit 1
read -sp 'Enter password. ' passphrase ; echo

exec 3<<<"$passphrase"

gpg2 --no-tty --use-agent --batch --yes --passphrase-fd 3 --sign-with "$signing_key" --clearsign "$tempfile"
gpg2 --no-tty --use-agent --verify "$tempfile.asc"

gpg2 --no-tty --use-agent --yes --armor --recipient "$encryption_key" --encrypt "$tempfile"

exec 3<<<"$passphrase"
gpg2 --no-tty --use-agent --batch --decrypt --passphrase-fd 3 "$tempfile.asc"

Но, к сожалению, таким способом пароли gnupg-agent не кеширует пароль. Это можно исправить?

Системная информация:

  • Когда я не использую этот скрипт, у меня нет проблем с gnupg-agent. Когда я вручную подписываю / дешифрую файл в оболочке, pinentry дважды запрашивает пароль, а затем кэширует его до перезагрузки.
  • Использование Debian Wheezy.
  • версия gpg:

dpkg -l | grep gnupg

ii  gnupg                                        1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement
ii  gnupg-agent                                  2.0.22-3                           i386         GNU privacy guard - password agent
ii  gnupg-curl                                   1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement (cURL)
ii  gnupg2                                       2.0.22-3                           i386         GNU privacy guard - a free PGP replacement (new v2.x)

Я недавно спросил в списке рассылки gnupg-users, но ответа не получил.

Может быть, этот ответ будет работать? Возможно gpg-connect-agentтребуется?

adrelanos
источник
Я впечатлен: это exec 3<<<"$passphrase"было ново даже для меня ... И я просто бросил награду в 250 повторений за ответ, который вы цитируете.
Хауке Лэнг

Ответы:

3

Существует gnome-keyring-daemon и seahorse, которые делают управление ключами и паролями очень простым.

По сути, если вы используете gnome-keyring-daemon в качестве агента gpg, он может автоматически разблокировать ваши ключи GPG. Это достигается за счет поддержки набора ключей паролей, который содержит пароли для таких вещей, как веб-сайты, ключи GPG, ключи SSH и т. Д. Этот набор ключей паролей затем защищается собственным паролем. Таким образом, вы разблокируете его, и брелок для гнома разблокирует все остальное.
В качестве дополнительного бонуса, gnome-keyring-daemon имеет брелок для входа в систему, который, если пароль совпадает с вашим паролем пользователя, брелок автоматически разблокируется при входе в систему.


конфигурация

Как заставить это работать? Просто установите gnome-keyring-daemon и морского конька. Пакет должен выполнить всю конфигурацию системы за вас. Просто убедитесь, что вы не запускаете другого демона для ключей или агента GPG . Какой из них запускается последним, «выигрывает», и набор ключей gnome начинается в стеке PAM, поэтому очень рано.

Если ваши ключи GPG хранятся в нем ~/.gnupg, он автоматически подберет их и будет действовать как агент GPG для них. То же самое касается ключей SSH, хранящихся в~/.ssh

В первый раз, когда вы попытаетесь использовать закрытый ключ, вы увидите диалоговое окно, которое выглядит следующим образом: (я запустил его с помощью простой командной строки gpg -d myfile.gpg). разблокировать брелок
Просто выберите «Автоматически разблокировать этот брелок при каждом входе в систему».

Сейчас мы не говорили о морском коньке. Это потому, что это не строго необходимо. Все это было сделано с помощью обычного демона gnome-keyring-daemon. Однако с морским коньком вы можете просматривать и управлять всеми своими ключами и брелоками. И если вы используете централизованную аутентификацию (LDAP), вам нужно будет использовать ее при изменении пароля для входа в систему, чтобы также изменить пароль в связке ключей «вход» в соответствии с ней.

морской конек - ключи gpg


Другие пароли

Как упоминалось ранее, gnome-keyring-daemon также может хранить пароли веб-сайтов. В прошлый раз, когда я проверял, Chrome поддерживает это, а Firefox - нет. Однако есть одна хитрость, чтобы заставить это работать.
По умолчанию у вас будет 2 цепочки для ключей, цепочка для ключей входа в систему и цепочка для ключей по умолчанию. Брелок по умолчанию - это имя по умолчанию (отсюда и название). Но это отдельная связка ключей, поэтому она не разблокируется автоматически. В морском коньке, если вы щелкнете правой кнопкой мыши на брелке «логин», есть опция «установить по умолчанию». Выберите это, и он начнет привыкать к паролям. Лично я просто удаляю "по умолчанию" и использую "логин" для всего.

Патрик
источник
Жаль, что я не пользователь гнома. Я сделал sudo apt-get remove gnupg-agentи sudo apt-get install gnome-keyring seahorse. Затем создали файл /etc/X11/Xsession.d/999gnomekeyringсо следующим содержанием. eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) export GNOME_KEYRING_CONTROL GNOME_KEYRING_PID GPG_AGENT_INFO SSH_AUTH_SOCK(В противном случае gnome-keyring даже не запустится в KDE.) Теперь, когда я запускаю gpg -d myfile.gpg, у меня спросят пароль, и он будет кеширован, но мне никогда не предлагалось это диалоговое окно.
adrelanos
(Это плохо, потому что я вернулся к тому, с чего начал. Ключ подписи будет кэшироваться отдельно.) (Между строкой eval и export есть новая строка, что невозможно с разметкой комментариев здесь.)
adrelanos
Я не использую gnome для моего менеджера рабочего стола. Это не обязательно. Gnome делает гораздо больше, чем просто менеджер рабочего стола. Вам не нужно ничего добавлять /etc/X11/Xsession.d. Это должно быть сделано в стеке PAM. Вы должны иметь session optional pam_gnome_keyring.so auto_startзапись в одном или нескольких файлах в /etc/pam.d. К сожалению, я не использую Debian, поэтому я не знаю, какой именно. Если этого нет, тогда это проблема.
Патрик
Без добавления в /etc/X11/Xsession.d, ps aux | grep gnomeпоказывает, что gnome-keyring-daemon не запускается. (Тем не менее, удалил его.) /usr/share/doc/libpam-gnome-keyring/README.DebianГоворит If you want to start gnome_keyring from another display manager, you need to add the following lines to the corresponding /etc/pam.d/?dm file: auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start(новые строки удаляются самими комментариями). Сделал это, добавил /etc/pam.d/kdm, перезапустил kdm. Нет загрузки агента, ни один не доступен.
adrelanos
Я в растерянности. Если вы используете kdmи вставляете это /etc/pam.d/kdm, это должно было быть сделано. Единственное, что я могу предложить, если вы все еще хотите продолжить этот маршрут, это копаться в журналах. Извините за ложную надежду, думал, что это будет простым решением для вас.
Патрик
0

Я провел некоторое расследование, и результат меня удивил, но он прост:

При вызове этот путь gpgне общается с gpg-agent вообще ! gpgспособен делать все эти операции самостоятельно.

Но если gpg-agentон даже не знает, что что-то произошло, он вряд ли узнает фразу-пароль, которую не знал раньше.

Хауке Лагинг
источник
Похоже, я нашел способ, как это не может быть решено.
adrelanos
Мой оригинальный вопрос все еще открыт. (Который есть Can I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?) Я надеюсь ввести пароль gpg-agentили gpg-connect-agentкак-то возможно.
adrelanos