即使指定了 --passphrase,GPG2 也會要求輸入密碼

即使指定了 --passphrase,GPG2 也會要求輸入密碼

我正在嘗試編寫 gpg 解密腳本,因此需要在命令列上提供密碼。根據手冊頁,有三種方法可以做到這一點:使用從檔案讀取--passphrase-file,使用從標準輸入(或另一個檔案描述符)讀取--passphrase-fd 0,或僅使用包含在命令列中--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

編輯:不像如何強制 GPG 使用控制台模式 pinentry 提示輸入密碼?,它只是試圖獲取一個基於文字的密碼條目以在 SSH 會話中使用,我試圖獲取一種完全非互動的方法來使用 GPG 來編寫腳本。

答案1

我在這裡找到了解決方案:https://wiki.archlinux.org/index.php/GnuPG#Unattended_pa​​ssphrase

簡而言之,我需要先透過將以下行新增至檔案來啟用 gpg-agent 中的 pinentry「環回」模式~/.gnupg/gpg-agent.conf

allow-loopback-pinentry

然後將--pinentry-mode loopback參數添加到我的gpg2呼叫中

相關內容