为什么我会收到此错误以及修复错误的解决方案是什么?

why am I getting this error and what is solution doing to fix the error?

我是 puppet 的新手,我在 puppet slave 上遇到了这个错误。在互联网上进行一些研究后,我找到了一个有效的解决方案,不幸的是,没有关于错误原因或代码正在做什么来解决问题的准确解释。我真的不喜欢在不了解代码的作用和修复方式的情况下复制和粘贴代码/如果我能得到错误发生原因的解释以及代码正在做什么来解决这个问题,我将非常感激谢谢。

错误信息

Warning: Unable to fetch my node definition, but the agent run will continue:

警告:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

信息:检索插件事实

错误:/File[/opt/puppetlabs/puppet/cache/facts.d]:无法使用 'eval_generate' 生成额外资源:SSL_connect SYSCALL 返回=5 errno=0 state=unknown state

错误:/File[/opt/puppetlabs/puppet/cache/facts.d]:无法评估:无法检索 puppet:///pluginfacts 的文件元数据:SSL_connect SYSCALL returned=5 errno=0 state=未知状态

信息:正在检索插件

错误:/File[/opt/puppetlabs/puppet/cache/lib]:无法使用 'eval_generate' 生成额外资源:SSL_connect SYSCALL 返回=5 errno=0 state=unknown state

错误:/File[/opt/puppetlabs/puppet/cache/lib]:无法评估:无法检索 puppet:///plugins 的文件元数据:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

信息:加载事实

错误:无法从远程服务器检索目录:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

警告:不对失败的目录使用缓存

错误:无法检索目录;跳过 运行

错误:无法发送报告:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

解决方案

[root@host ~]# puppet config print ssldir

/etc/puppetlabs/puppet/ssl

[root@host ~]# mkdir /tmp/puppet-ssl-orig

[root@host ~]# mv /etc/puppetlabs/puppet/ssl/* /tmp/puppet-ssl-orig

[root@host ~]# puppet agent -t

您提供的错误消息表明问题围绕着代理未能与主服务器建立 SSL 连接。消息本身或提供的其他材料中没有足够的信息来确定 先验 问题的具体性质,但您执行的缓解措施是删除所有代理存储的证书(包括它自己的)。从这解决了问题这一事实,我们可以推断出代理拒绝了主人的主机证书。

这种情况很可能是由于代理先前已与主服务器同步,但随后试图从加密方式不同的主服务器请求目录。例如,在 master 上重新安装 Puppet 通常会清除所有以前的加密证书,这可能会产生这种效果。或者,如果 善意的 邪恶的演员试图用自己控制的人冒充真正的主人(除非他们设法窃取了真正的主人证书),这也是您期望发生的事情.

无论如何,清除代理的现有证书会导致它

  • 为自己生成一个新证书和相应的证书签名请求
  • 在下次目录请求时接受主证书和 CA 证书,并提交 CSR
  • 从主人那里接受一个新的签名证书给自己

所有证书签名位都成功也表明主机没有之前颁发给该特定代理的证书的记录,这也支持主机已从代理下换出的理论。

Puppet 很糟糕,这种 SSL 废话是主要原因之一。 我相信,对于 CentOS 7 和 puppet 6,这是一种快速而肮脏的方式。 请注意,这会删除双方的证书,因此如果其他客户端使用主服务器,您也必须重置它们。

条件:客户端和服务器都知道主机名操作(例如 /etc/hosts 中的主机条目具有正确的名称和 IP,或 DNS)。

关于高手:

rm -rf $(puppet master --configprint ssldir)
systemctl restart puppetmaster

在客户端:

rm -rf /etc/puppetlabs/puppet/ssl/
puppet agent --test --verbose #( agent run creates/requests certs )

然后再上master:

puppet cert sign --all

然后再次 运行 代理,它应该可以工作了。 这取决于傀儡版本是否使用中间 CA 证书来解决所有问题,并且版本之间也存在不兼容问题。