如何预先签署 Puppet 证书?

Ran*_*ard 26 cloud cluster puppet

Puppet需要被管理的客户端(puppet)和服务器(puppetmaster)之间的证书。您可以在客户端手动运行,然后进入服务器对证书进行签名,但是如何为集群/云机器自动执行此过程?

Ran*_*ard 28

在服务器(puppetmaster)上运行:

puppetca --generate <NAME>
Run Code Online (Sandbox Code Playgroud)

然后将以下内容从服务器复制到客户端:

/var/lib/puppet/ssl/certs/<NAME>.pem
/var/lib/puppet/ssl/certs/ca.pem
/var/lib/puppet/ssl/private_keys/<NAME>.pem
Run Code Online (Sandbox Code Playgroud)

如果您希望以<NAME>主机名以外的方式签名,请使用:

puppetd --fqdn=<NAME>
Run Code Online (Sandbox Code Playgroud)

如果运行守护程序,请添加到 /etc/puppet/puppet.conf

[puppetd]
certname=<NAME>
Run Code Online (Sandbox Code Playgroud)


jti*_*man 6

简单回答:自动签署新请求。这当然是危险的,因为您盲目信任连接到您的 puppetmaster 的任何系统,这是要求手动签名的目的。

[puppetmasterd]
autosign = true
Run Code Online (Sandbox Code Playgroud)

您也可以指定 false 和一个文件来确定要签名的密钥。

请参阅Puppet wiki 上的配置参考

另一种选择是使用像Capistrano这样的工具,您可以在其中指定 puppetmaster 节点并创建客户端实例节点,然后在任务中:

  • 创建实例节点,比如使用 EC2 的 API 和 Ruby。
  • 在实例上运行 puppetd,连接到服务器。
  • 为实例的请求运行 puppetca --sign (因为我们知道实例名称,因为它在上面的创建位中给出)。
  • 在实例上再次运行 puppetd,这次成功连接,因为证书已签名。


Gar*_*son 6

如果您有主机数据库,则可以使用自动签名功能。在您的puppet.conf文件中[puppetmasterd],添加:

autosign = /path/to/autosign.conf
Run Code Online (Sandbox Code Playgroud)

然后使用 crontab 生成此文件。自动签名文件只是一个主机列表,当它们第一次连接到 puppetmaster 时要自动签名。我使用 LDAP 来配置我的 puppet 主机,所以我的 cron 看起来像:

* * * * * root /usr/bin/ldapsearch -x '(objectClass=puppetClient)' cn | /bin/grep ^cn | /bin/sed 's!^cn: !!' > /etc/puppet/autosign.conf
Run Code Online (Sandbox Code Playgroud)

我确信使用 iClassify 的人能够编写一个查询来做同样的事情。

当然,你需要对网络有一定的信任。我在 EC2 上使用它。我的 puppetmaster 服务器所在的组只允许来自其他受信任组的连接。如果您的 puppetmaster 对互联网开放,我不建议您这样做。