我正在尝试使用gpg
来--clearsign
从脚本中删除文件(出于debian打包目的)。
我有一个导出的无密码private-key.gpg
文件,并希望:
gpg --clearsign -o output input
我不想惹恼当前用户的~/.gnupg
或/run/user/$(id -u)/gnupg
,因为他们与我的脚本无关。另外,该脚本可以同时在多个实例中运行,我不希望它们相互干扰。
我认为那很容易。将$GNUPGHOME
设置为临时目录并完成该操作。但是我无法弄清楚如何使gpg
在脚本中运行而又不会弄乱用户的标准配置 。似乎gpg
已竭尽全力使它无法避免gpg-agent
,而gpg-agent
坚持使用全局/硬编码路径。
我可以将一切保留在$GNUPGHOME
下吗?或者如何在不影响用户配置或使用gpg
或其他脚本实例的情况下,从shell脚本安全地使用gpg
?
阅读gpg docs可以看到:
--use-agent
--no-use-agent
This is dummy option. gpg always requires the agent.
--use-standard-socket
--no-use-standard-socket
--use-standard-socket-p
Since GnuPG 2.1 the standard socket is always used.
These options have no more effect. The command gpg-agent
--use-standard-socket-p will thus always return success.
这个“标准套接字”大概位于/run/user/$(id -u)/gnupg
中-因此看来我无法避免gpg与用户对gpg的“正常”使用相混淆。
版本:Debian 9上的gpg 2.1.18 /拉伸/稳定版
答案 0 :(得分:0)
如果您不能阻止gpg创建文件,那么为gpg提供一个放置文件的位置对当前进程是唯一的吗?
# Create a temporary directory for gpg.
dir="$(mktemp -d)"
# Remove the directory and its contents when the script exits.
trap '[[ ! -d "${dir}" ]] || rm -r "${dir}"' EXIT
# Put your private-key.gpg in the temporary directory.
$(your command here)
# Tell gpg to use the temporary directory.
gpg --homedir "${dir}" --clearsign -o output input