从脚本运行时避免gpg-agent出现问题-gpg2

时间:2018-10-02 14:59:09

标签: bash gnupg gpg-agent

我正在尝试使用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.

gpg-agent docs说:

--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 /拉伸/稳定版

1 个答案:

答案 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