GPG2 pede senha mesmo com --passphrase especificado

GPG2 pede senha mesmo com --passphrase especificado

Estou tentando criar um script de descriptografia gpg e, como tal, preciso fornecer a senha na linha de comando. De acordo com a página de manual, existem três maneiras de fazer isso: ler de um arquivo usando --passphrase-file, ler de stdin (ou outro descritor de arquivo) usando --passphrase-fd 0ou incluir na linha de comando usando apenas --passphrase. Todos os itens acima também precisam --batchser configurados, o que eu fiz.

Minha tentativa de linha de comando mais recente é:

echo "<password>" | gpg2 --no-tty --batch --passphrase-fd 0 -d -o /<path_to_destination>/$FILE_NAME $FILE

que ainda exibe uma caixa de diálogo solicitando a senha. O que estou perdendo aqui? Para referência, se faz diferença, minha senha inclui alguns caracteres especiais como &, mas não parece reclamar disso. Além disso, a versão gpg é 2.1.9:

# gpg2 --version
gpg (GnuPG) 2.1.9
libgcrypt 1.7.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

EDITAR: Ao contrárioComo forçar o GPG a usar pinentry no modo console para solicitar senhas?, que está simplesmente tentando obter uma entrada de senha baseada em texto para uso em uma sessão SSH, estou tentando obter um método completamente não interativo de usar GPG para uso em scripts.

Responder1

Encontrei a solução aqui:https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase

Resumindo, eu precisava primeiro ativar o modo pinentry "loopback" no gpg-agent adicionando a seguinte linha ao ~/.gnupg/gpg-agent.confarquivo:

allow-loopback-pinentry

Em seguida, adicionando o --pinentry-mode loopbackargumento à minha gpg2chamada

informação relacionada