我正在尝试使用 GnuPG 作为管道来加密我们的备份(从标准输入读取并写入标准输出)。密码是从文件中读取的。命令示例:
echo "mysecret" | gpg --passphrase-file password.key --batch --symmetric --cipher-algo AES256 > test.gpg
当我以普通用户身份运行它时,它工作正常。但如果我以 root 身份运行它,我得到:
gpg: gpg-agent is not available in this session
gpg: can't query passphrase in batch mode
gpg: error creating passphrase: invalid passphrase
gpg: symmetric encryption of `[stdin]' failed: invalid passphrase
我怎样才能获得--passphrase-file
root 权限?
我无法--passphrase-fd 0
按照建议使用这里因为stdin是要加密的数据。我正在使用 GPG 1.4.20(来自 Ubuntu 16.04.5 LTS)
答案1
我找到了一个解决方法,它利用额外的文件描述符进行输入:
exec {FD}<password.key
echo "mysecret" | gpg --passphrase-fd ${FD} --batch --symmetric --cipher-algo AES256 > test.gpg
答案2
我想建立在另一个答案的基础上,其中涉及首先将密码写入文件系统。您可以将 printf 命令的输出捕获为文件描述符:
passphrase="topsecret"
exec {pw_fd}< <(printf "$passphrase")
echo "a total secret" | gpg --passphrase-fd ${pw_fd} --batch --symmetric --cipher-algo aes > test.gpg
exec {pw_fd}<&-
然后测试:
gpg -d --passphrase -i test.gpg
gpg: AES.CFB encrypted data
gpg: encrypted with 1 passphrase
a total secret