我在同一台机器上安装了 Puppet Master 和 Agent。启动客户端时,出现以下错误消息。
puppet agent --server=agent.com --no-daemonize --debug
err: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed. This is often because the time is out of sync on the server or client
答案1
尝试在 /etc/hosts 中添加条目
127.0.0.1 localhost.localdomain localhost puppet
删除--server
puppet agent 命令的参数。
答案2
找出完整限定域名 (FQDN)通过发出以下指令来控制你的傀儡大师:
# openssl x509 -noout -subject -in /var/lib/puppet/ssl/ca/ca_crt.pem
subject= /CN=Puppet CA: host.domain.com
与以下输出(如果有)进行比较:
# puppet cert list --all
向您的文件中添加一个条目/etc/hosts
,指向正在监听端口的 IP puppetmaster
(8140
):
192.168.124.2 host.domain.com host
要确定要使用哪个 IP,您需要知道监听的进程,如果这是独立安装puppetmaster
或apache
+passenger
安装,则情况会有所不同。您可以使用:
netstat -an | grep 8140.*LISTEN
检查您的/etc/puppet/puppet.conf
文件,特别是server=
条目,它应该指向上面描述的 FQDN。
不要使用localhost
,除非您不想puppetmaster
被发现。
在开始之前pupppet agent
,请发出:
# puppet agent --test --waitforcet 2
指示代理向 puppetmaster CA 发送 CSR 并等待其签名。
检查使用
# puppet cert --list
等待签署 CSR。签署它:
# puppet cert sign host.domain.com
观察 puppet 代理接收已编译的目录并应用它。之后,您就可以启动代理并将其添加到启动脚本中了。
答案3
我发现,采用以下方法/etc/puppet/puppet.conf
可以解决“按书本”重新生成证书仍然会产生问题中描述的情况:
[master]
certname=masterhost.domain.com
[agent]
certname=agenthost.domain.com
(其中masterhost.domain.com
puppetmaster 的 FQDN 和agenthost.domain.com
代理的 FQDN 相同)
在我看来,这是一种相当清晰的方法,可以确保当两个主机都在同一台主机上运行时,puppet 知道哪个名称是主名称、哪个名称是代理名称,尤其是因为仅仅设置server=masterhost.domain.com
似乎不足以避免冲突。
我没有找到添加 puppetmaster 的 DN 的建议解决方案/etc/hosts
(我已经将其作为 DNS 别名),所以我不能说这是否对我的情况有帮助。