GPG2 запрашивает пароль даже при указании --passphrase

GPG2 запрашивает пароль даже при указании --passphrase

Я пытаюсь написать скрипт расшифровки gpg, и поэтому мне нужно указать пароль в командной строке. Согласно странице руководства, есть три способа сделать это: прочитать из файла с помощью --passphrase-file, прочитать из stdin (или другого файлового дескриптора) с помощью --passphrase-fd 0или включить в командную строку с помощью just --passphrase. Все вышеперечисленное также требует --batchустановки, что я и сделал.

Моя последняя попытка выполнить командную строку:

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

который все еще выводит диалоговое окно с запросом пароля. Что я здесь упускаю? Для справки, если это имеет значение, мой пароль включает некоторые специальные символы, такие как &, но он, похоже, не жалуется на это. Кроме того, версия 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

EDIT: В отличие отКак заставить GPG использовать консольный режим ввода пароля для ввода пароля?, который просто пытается получить текстовую запись пароля для использования в сеансе SSH, я пытаюсь получить полностью неинтерактивный метод использования GPG для использования в скриптах.

решение1

Я нашел решение здесь:https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase

Короче говоря, мне нужно было сначала включить режим «loopback» для ввода пароля в gpg-agent, добавив в ~/.gnupg/gpg-agent.confфайл следующую строку:

allow-loopback-pinentry

Затем добавляю --pinentry-mode loopbackаргумент к своему gpg2вызову

Связанный контент