代码之家  ›  专栏  ›  技术社区  ›  Sander Verhagen

如何规避“不应解析apt密钥输出”?

  •  74
  • Sander Verhagen  · 技术社区  · 7 年前

    我正在自动安装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)
      

    很明显,我也可以绕过这个,只是重定向 stderr /dev/null . 这让我好奇:

    这些优秀的人建议我如何验证我的钥匙指纹? 或者,我想让它自动化,这是根本错误的吗?这是否违背了这一点?(我认为不是,因为我仍然手动从网站上提取了预期的指纹,但请随意告诉我其他情况……)

    4 回复  |  直到 7 年前
        1
  •  46
  •   baduker    7 年前

    从apt密钥源,您可以设置 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE 设置为非空值以禁用此警告。

    您还可以使用“grep-q”,这样就不需要在 /dev/null 任何一个

        2
  •  6
  •   David L.    6 年前

    回答“我是否犯了根本错误”:

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

    你并没有写下你到底在做什么,但有一件事需要意识到:

    密钥确实有一些过期时间,因此在一段时间后,脚本中的指纹将过时,并且可能不再像预期的那样工作。

    一旦安装了存储库及其密钥,系统就会自动升级密钥,但在最初添加存储库时,必须提供最新密钥。在自动化安装的脚本中,我不测试是否已添加密钥,但测试是否已添加存储库。如果没有添加存储库,那么我会将其与一个最新密钥一起添加,我总是从其URL下载该密钥。

        3
  •  1
  •   Anton Krug Daniel    6 年前

    我正在修改命令本身以使用批处理模式,这样它就不会抱怨stdout了。对于更大的apt密钥,这将起作用,在debian上快速测试:

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

    而对于较小的apt键,这可能会起作用(未经测试,因为我记不起在哪里见过这个更简单的变体):

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

    您需要权限来写入/usr/bin/apt密钥,以便以root身份运行或使用sudo

        4
  •  0
  •   xavier bs    3 年前

    这很有效

    apt-key exportall > test.key 2>/dev/null
    

    apt-key exportall 2>&1 | grep -v '^Warning' > test.key