Como configurar o gpg para inserir a senha apenas uma vez por sessão

18

É possível configurar gpgde uma maneira que eu insira a senha apenas uma vez e funcione durante toda a sessão (estou usando Ubuntu/XFce)?

Não sei ao certo como gpgfunciona, parece que a função padrão é gpgsolicitar gpg-agenta senha e o agente executa a inserção de pinos para solicitar a senha.

Gostaria de usar pinentry-maldições apenas uma vez por sessão, para poder colar minha senha (tenho uma hexsequência de uma frase - eu uso echo -n <SENTENCE> | str-hex) e assinar emails do Claws Mail sem colocar a senha (você não pode usar pinentry-maldições com o Claws Enviar).

jcubic
fonte

Respostas:

16

Você pode usar a técnica descrita nesta página:

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

Aqui está a essência:

  1. Instale o programa gpg-agent e pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. Adicione as linhas abaixo a ~/.profile. Qualquer shell de confirmação do POSIX deve incluir esse arquivo.

    # 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
    

    Este pequeno script será ativado quando você fizer login. Se o agente não estiver em execução, ele será iniciado. Quando o agente é iniciado, ele mostra como definir variáveis ​​de ambiente para conectar-se a ele. O script salva esses valores em ~/.gpg-agent-info, para que, quando você iniciar outra sessão de login, o script possa configurar as variáveis ​​corretamente e, assim, usar o agente.

Você só precisará digitar sua senha uma vez por inicialização. O agente armazenará suas chaves na memória, para que você não precise digitar a senha novamente.

janos
fonte
Eu estava usando esse script felizmente, mas falharia aleatoriamente. Eventualmente, eu modifiquei o condicional para isso 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` ]] ; thene funcionou bem. O problema é que o script acima verifica se o processo .gpg-agent-infoestá ativo e aceita sinais com kill -0. Se um processo existe, mas não gpg-agent, obtemos o comportamento errado. O código anexado verifica se temos o processo correto.
precisa saber é