Как настроить gpg для ввода ключевой фразы только один раз за сеанс

18

Можно ли настроить gpgтаким образом, чтобы я вводил фразу-пароль только один раз, и она будет работать для всего сеанса (я использую Ubuntu/XFce)?

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

Я хотел бы использовать pinentry-curses только один раз за сеанс, поэтому я могу вставить свою фразу-пароль (у меня есть hexстрока из предложения - я использую echo -n <SENTENCE> | str-hex) и подписать электронную почту из Claws Mail, не вводя фразу-пароль (вы не можете использовать pinentry-curses с Claws Mail).

jcubic
источник

Ответы:

16

Вы можете использовать методику, описанную на этой странице:

http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent

Вот суть:

  1. Установите программу gpg-agent и pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Добавьте строки ниже к ~/.profile. Любая POSIX-подтверждающая оболочка должна включать этот файл.

    # Invoke GnuPG-Agent the first time we login.
    # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
    if test -f $HOME/.gpg-agent-info && \
        kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
        GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
    else
        # No, gpg-agent not available; start gpg-agent
        eval `gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info`
    fi
    export GPG_TTY=`tty`
    export GPG_AGENT_INFO
    

    Этот маленький скрипт будет активирован при входе в систему. Если агент не запущен, он будет запущен. Когда агент запущен, он показывает, как установить переменные среды для подключения к нему. Сценарий сохраняет эти значения ~/.gpg-agent-info, чтобы при запуске другого сеанса входа в систему он мог правильно настроить переменные и, таким образом, использовать агент.

Вам нужно будет ввести пароль только один раз за загрузку. Агент сохранит ваши ключи в памяти, поэтому вам не придется вводить новую фразу-пароль.

Янош
источник
Я с радостью использовал этот скрипт, но он случайно зависал. В конце концов, я изменил условное к этому, GPG_PROCESS=`cut -d: -f 2 $HOME/.gpg-agent-info` if test -f $HOME/.gpg-agent-info && \ kill -0 ${GPG_PROCESS} 2>/dev/null && \ [[ ${GPG_PROCESS} == `pgrep -x -u "${USER}" gpg-agent` ]] ; thenи он работал нормально. Проблема заключается в том, что приведенный выше скрипт проверяет, активен ли процесс, .gpg-agent-infoи принимает сигналы с помощью kill -0. Если процесс есть, но нет gpg-agent, мы получаем неправильное поведение. Прикрепленный код проверяет у нас правильный процесс.
wyer33