如何规避“不应该解析apt-key输出”?

时间:2018-01-09 06:34:07

标签: gnupg apt

我正在自动化我的Docker安装。像这样:

if apt-key fingerprint 0EBFCD88 | grep "Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88" > /dev/null
then
  # proceed
fi

这在apt-key的旧版本中运行良好,但最近的版本有两个问题:

  1. 不同的输出格式:我可以解决这个问题
  2. 警告:

    Warning: apt-key output should not be parsed (stdout is not a terminal)
    
  3. 显然,我也可以解决这个问题,只需将stderr重定向到/dev/null即可。这让我很好奇:

    这些好人如何建议我验证我的关键指纹?或者我是否因为想要自动化而从根本上弄错了,这是否会失败? (我想不是,因为我仍然手动从网站上取消了预期的指纹,但随时可以告诉我......)

3 个答案:

答案 0 :(得分:13)

从apt-key来源,您可以将APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE设置为非空值以禁用此警告。

您也可以使用“grep -q”,因此您无需在/dev/null中重定向stdout。

答案 1 :(得分:2)

回答“我是否从根本上错了”部分:

我相信可能是这样。这就是警告的原因。

您没有写出您要做什么,但是要意识到的一件事是:

密钥确实有一些过期,因此一段时间后,脚本中的指纹将变得过时,并且可能不再表现出预期的行为。

一旦安装了存储库及其密钥,系统就会以某种方式自动升级密钥,但是当最初添加存储库时,必须提供最新的密钥。在自动执行安装的脚本中,我不测试是否已添加密钥,但我测试是否已添加存储库。如果未添加存储库,那么我将其与始终从其URL下载的最新密钥一起添加。

答案 2 :(得分:0)

我正在修改命令本身以使用批处理模式,因此它不会抱怨stdout。对于更大的apt-key,它将起作用,并在debian上进行了快速测试:

sed -i "s%{GPG_EXE}\")' --%{GPG_EXE}\")' --batch --%g" /usr/bin/apt-key

尽管对于较小的apt-key来说,它也可以工作(请耐心等待,因为我不记得确切的位置了,这个简单的变体在哪里):

sed -i 's%GPG_CMD="gpg %GPG_CMD="gpg --batch %g' /usr/bin/apt-key

您需要特权才能写入/ usr / bin / apt-key,因此可以以root用户身份运行或使用sudo