我正在尝试使用 ubuntu:bionic Docker 映像在 Gitlab CI 系统上导入 GPG 密钥。为了安全地执行此操作,我必须将密钥存储在所谓的秘密变量中(然后在运行时简单地变为环境变量)。
因此我尝试以非二进制格式导出密钥,如下所示:
gpg2 --armor --export-secret-keys "my name <my email>" > my-gpg-key.asc
my-gpg-key.asc 当时看起来像这样:
-----BEGIN PGP PRIVATE KEY BLOCK-----
long multi line ascii string
-----END PGP PRIVATE KEY BLOCK-----
然后我复制了文件内容并从中定义了一个秘密变量。该变量名为LAUNCHPAD_GPG_PRIVATE_KEY
以下是我尝试过的:
apt-get -qq update --yes
apt-get -qq install --yes gnupg2 > /dev/null
export GPG_TTY=$(tty) # compensate for ioctl error
gpg2 --list-keys
gpg2 -v --import <(echo "$LAUNCHPAD_GPG_PRIVATE_KEY")
gpg2 --list-keys
这导致:
gpg: key 17B1EA9E090F697D/17B1EA9E090F697D: error sending to agent: No such file or directory
gpg: error building skey array: No such file or directory
我也尝试使用 gpg 而不是 gpg2 导出和导入密钥:结果相同......
我也尝试过跑步
gpg-agent --daemon
和
gpg-agent --daemon --allow-loopback-pinentry
导入之前...但仍然:同样的错误。
有什么想法可以正确完成此操作吗?
答案1
通过添加批处理标志,我成功地将其导入,没有任何错误。
gpg2 -v --batch --import <(echo "$LAUNCHPAD_GPG_PRIVATE_KEY")
不要问我为什么这样可以解决问题。我花了好几个小时才弄清楚……