Eu só tenho o plano semelhante para buscar periodicamente / sincronizar os e-mails usando mbsync
e cron
. As senhas são gerenciadas pelo pass
que usa o GnuPG para criptografar os dados confidenciais.
O mais novo GnuPG (estou usando v2.1.18) deve usar gpg-agent
para pedir a senha necessária para descriptografar as chaves privadas.
E o gpg-agent
será iniciado automaticamente quando, por exemplo, invoco pass
para obter a senha da minha conta de e-mail e abrirá a caixa de diálogo pinentry solicitando a frase secreta.
Eu não quero configurar gpg-agent
para armazenar em cache minha frase-senha por muito tempo (por exemplo, 1 dia ou até 1 ano) e não quero a caixa de diálogo pinentry irritante de gpg-agent
acionado pelas tarefas agendadas, que devem ser apenas silenciosas.
Acho que a tarefa mbsync
cron sincronizará meus e-mails quando gpg
puder descriptografar a senha para pass
sem acionar gpg-agent
para solicitar ao usuário a frase secreta, caso contrário, a tarefa cron só sairá.
Eu encontrei o GnuPG tem a opção --pinentry-mode
, que pode ter valores:
-
default
: use o padrão do agente, que éask
. -
ask
: força o uso do Pinentry. -
cancel
: Emula o uso do botão Cancelar do Pinentry. -
error
: Retorna um erro de Pinentry ('' No Pinentry ''). -
loopback
: redireciona as consultas do Pinentry para o chamador. Observe que, em contraste com o Pinentry, o usuário não será solicitado novamente se inserir uma senha incorreta.
Portanto, posso desabilitar explicitamente o uso de pinagem passando --pinentry-mode cancel
ou --pinentry-mode error
e deixe gpg
tentar assinar / descriptografar uma mensagem. Se for bem sucedido, então gpg-agent
já tem a frase secreta em cache e não exibirá a caixa de diálogo pinentry ; caso contrário, o teste de sinal / decodificação falhou.
Por exemplo:
Quando gpg-agent
não armazena em cache a frase-senha necessária:
$ echo "test" | \
gpg2 --sign --batch --no-tty --pinentry-mode error \
--local-user <[email protected]> -o /dev/null
# Return code: 2
# OUTPUT:
# gpg: signing failed: No pinentry
# gpg: signing failed: No pinentry
Quando gpg-agent
já armazenou em cache a frase secreta, o mesmo comando será bem-sucedido e retornará o código de status 0.
Se eu usar --pinentry-mode cancel
, então gpg
falhará com Operation cancelled
.