Estou solicitando gpg2
em um script CLI a criptografia simétrica de um arquivo local. Parece solicitar gpg-agent
uma senha por meio de alguma CLI, interface de usuário baseada em texto. Contanto que eu esteja por perto para inserir a senha, tudo funciona bem. Se não estiver, no entanto, eventualmente falhará com esta mensagem:
gpg-agent[15338]: command get_passphrase failed: Operation cancelled
gpg: cancelled by user
gpg: error creating passphrase: Operation cancelled
gpg: symmetric encryption of `XXXX.tar' failed: Operation cancelled
Existe alguma maneira de desativar totalmente esse tempo limite?
Eu gostaria que o prompt da senha permanecesse na tela indefinidamente até que eu digitasse algo.
Responder1
A solução foi encontrada aqui:https://dev.gnupg.org/T3240
O atraso é causado pela consulta do pinentry ao chaveiro do GNOME. Adicione no-allow-external-cache
ao seugpg-agent.conf, ou remova gnome-keyring
, e mate o gpg-agent atualmente em execução:gpgconf --kill gpg-agent
Responder2
Em gpg-agent.conf (vejaagente gpg(1)), tente as seguintes opções:
pinentry-timeout 0
pinentry-program /usr/bin/pinentry-curses --timeout 0
(Você pode achar pinentry-tty
um pouco mais agradável de usar.)
Responder3
P: "Como evitar que o gpg-agent atinja o tempo limite durante a coleta da senha?"
R: Um caso específico é o uso de gpg
em uma ssh
sessão. A configuração abaixo permiteagente gpgtambém dentro de uma ssh
sessão. Em particular
- sem agarrarpermite recortar e colar
- não permitir cache externodesativa qualquer chaveiro
- maldições de pinentrypede a senha no terminal em vez do padrãopinheiralperguntando na janela da área de trabalho remota (no caso do ssh).
- A hora de viverTTL(5,6) está definido para 24 horas. Dessa forma, não é necessário digitar novamente a senha quando, por exemplo, um cron, que invoca um script com gpg-agent, é executado diariamente.
shell> cat ~/.gnupg/gpg-agent.conf
no-grab
no-allow-external-cache
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 86400
max-cache-ttl 86400
Responder4
O que funcionou para mim (gpg 2.1.11) foi apenas definir a pinentry-timeout
opção para um valor grande (como 24 horas), adicionando o seguinte ao meu ~/.gnupg/gpg-agent.conf
arquivo:
# time until pinentry closes in seconds
pinentry-timeout 86400