通过 Puppet 更新 apt gpg 密钥

通过 Puppet 更新 apt gpg 密钥

puppet apt 存储库 PGP 密钥几天前已过期

/etc/apt/trusted.gpg.d//puppetlabs-keyring.gpg
----------------------------------------------
pub   4096R/4BD6EC30 2010-07-10 [expired: 2016-07-08]
uid                  Puppet Labs Release Key (Puppet Labs Release Key)

当然可以手动更新

apt-key adv --recv-keys --keyserver keys.gnupg.net 4BD6EC30

但是,它可以通过自动运行的 Puppet 进行更新吗(例如通过 Puppet apt 模块)?

答案1

这就是我们开始使用的(感谢加思克):

  $key = '4BD6EC30'
  exec { 'apt-key puppetlabs':
    path    => '/bin:/usr/bin',
    unless  => "apt-key list | grep '${key}' | grep -v expired",
    command => "apt-key adv --keyserver keyserver.ubuntu.com \
      --recv-keys ${key}",
  }

更多讨论apt 模块的票已打开

答案2

虽然不是一个美容解决方案,但以下方法对我有用:

exec { 'update_apt_key':
        command => '/usr/bin/apt-key adv --recv-keys --keyserver keys.gnupg.net 47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
        onlyif  => "/usr/bin/apt-key adv --list-public-keys --with-fingerprint --with-colons | grep -B 1 47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30 | head -n 1 | grep -e '^pub:e:'",
}

答案3

更新 GPG 密钥:

是的,可以使用执行资源类型,即“执行外部命令”。为了防止exec每次都运行,请使用除非并检查/解析输出apt-key list,例如通过grep

添加 GPG 密钥:

puppetlabs apt 模块提供apt::key,它添加了 GPG 密钥。要使用它,请将以下内容放入您的代码中(摘自文档):

apt::key { 'puppetlabs':
  id      => '47B320EB4C7C375AA9DAE1A01054B7A24BD6EC30',
  server  => 'pgp.mit.edu',
}

安全说明:

使用短密钥 ID 会带来严重的安全问题,可能会让您遭受碰撞攻击。我们建议您始终使用完整指纹来识别您的 GPG 密钥。此模块允许使用短密钥,但如果您使用它们,则会发出安全警告。

更多关于为什么这对你很重要的信息:

短 OpenPGP 密钥 ID(例如 0x2861A790)长度为 32 位。事实证明,它们很容易被具有相同密钥 ID 的另一个密钥欺骗。长 OpenPGP 密钥 ID(例如 0xA1E6148633874A3D)长度为 64 位。它们很容易发生冲突,这也是一个潜在的严重问题。

如果您想要处理密钥的强加密标识符,则应使用完整指纹。您永远不应依赖短密钥 ID,甚至长密钥 ID。[...]

关于此的参考和更多信息。

相关内容