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 .