
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 0
ou incluir na linha de comando usando apenas --passphrase
. Todos os itens acima também precisam --batch
ser 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.conf
arquivo:
allow-loopback-pinentry
Em seguida, adicionando o --pinentry-mode loopback
argumento à minha gpg2
chamada