usando gpg-agent entre diferentes sessões

7

Estou tentando configurar gpg-agent

Quando eu entro na minha máquina (via SSH) e invoco gpg , ele pede senha toda vez (ele não inicia gpg-agent automaticamente).

Quando inicio gpg-agent manualmente usando:

eval "$(gpg-agent --daemon)"

a próxima invocação de gpg , na verdade, inicia o agente e depois de digitar minha senha uma vez, posso usar o gpg sem senha. Além disso, vejo que um soquete foi criado em $HOME/.gnupg/S.gpg-agent=

Quando faço logout e logon novamente (ssh), vejo que o soquete ainda existe em $HOME/.gnupg/S.gpg-agent= e ps mostra que o agente está em execução, mas todas as chamadas de gpg pedem senha, como se houvesse não era agente.

Eu adicionei isso ao meu .bashrc :

GPG_TTY=$(tty)
export GPG_TTY

mas isso não parece ajudar

Acho o comportamento de gpg-agent muito confuso. Estou familiarizado com ssh-agent e isso se comporta de maneira direta e compreensível.

Como posso usar gpg-agent da mesma forma que usaria ssh-agent ?

Para comparação, é assim que ssh-agent se comporta:

Depois de inicializar minha máquina e fazer login pela primeira vez, eu inicio ssh-add manualmente e escrevo minha frase-senha uma vez.

Então, toda vez que eu fizer login na minha máquina (X, console, ssh, ...) eu posso usar o agente (não preciso digitar minha senha novamente). Isso é feito adicionando a seguinte linha a .bashrc :

export SSH_AUTH_SOCK="$(find /tmp/ssh-*/agent.* -uid $(id -u) -type s -print -quit 2>/dev/null)"
    
por Martin Vegter 01.12.2014 / 03:21

2 respostas

7

gpg não procura pelo soquete (isso é diferente com a nova versão 2.1), mas pela variável de ambiente GPG_AGENT_INFO . Isso não está definido no log in. Esse é o problema. Obviamente, você tem a opção use-standard-socket in gpg-agent.conf para que o nome do soquete seja sempre o mesmo.

Você deve definir a variável em um script de login para executar um script simples que verifica se gpg-agent está sendo executado:

export GPG_AGENT_INFO=/path/to/your/HOME/.gnupg/S.gpg-agent:42:1
gpg-connect-agent /bye &>/dev/null || gpg-agent --daemon &>/dev/null

Essa é a parte para usar gpg . Para o SSH, você também precisa de SSH_AUTH_SOCK . A maneira mais fácil de obter as duas variáveis é adicionar a linha

write-env-file "${HOME}/.gpg-agent-info

para o arquivo de configuração gpg-agent.conf e para executar este script após o acima:

. "${HOME}/.gpg-agent-info"
export SSH_AUTH_SOCK

Isso é explicado na página gpg-agent man.

    
por 01.12.2014 / 07:14
1

Infelizmente, a solução na outra resposta não funcionou para mim. Ao meu lado gpg-agent --daemon ignora GPG_AGENT_INFO no ambiente e sempre define seu próprio novo, então cada login criou seu próprio processo de execução permanente.

Mas a seguinte linha foi:

for a in . .; do . "${HOME}/.gnupg/pg-agent-info.'uname -n'"; gpg-connect-agent /bye && break; gpg-agent --daemon >"${HOME}/.gnupg/pg-agent-info.'uname -n'"; done

  • Isso pressupõe que você tenha um diretório $HOME/.gnupg . Caso contrário, crie-o com mkdir ~/.gnupg

Veja como funciona:

  • Primeiro, ele origina a saída antiga da configuração do agente em execução
  • Se isso ainda for válido, ele será usado
  • else, ele inicia um novo daemon e lembra as configurações em "$ {HOME} /. gnupg / pg-agent-info.HOSTNAME"
  • Um segundo loop no for , então, relê a informação
  • Se dois loops não ajudarem, um terceiro também não.

Por favor, note que o hostname está embutido no nome do arquivo, porque pode ser que você compartilhe sua casa entre diferentes computadores.

Sinta-se à vontade para melhorar para se livrar de saídas de erro possivelmente feias e, possivelmente, criar o diretório, se estiver faltando.

    
por 18.08.2016 / 16:55

Tags