【问题标题】:why am I getting this error and what is solution doing to fix the error?为什么我会收到此错误以及解决该错误的解决方案是什么?
【发布时间】:2020-06-23 17:04:30
【问题描述】:

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

错误信息

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

警告:返回 SSL_connect SYSCALL=5 errno=0 state=unknown state

信息:检索插件事实

错误:/File[/opt/puppetlabs/puppet/cache/facts.d]:无法使用“eval_generate”生成其他资源:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

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

信息:检索插件

错误:/File[/opt/puppetlabs/puppet/cache/lib]:无法使用“eval_generate”生成其他资源:SSL_connect SYSCALL returned=5 errno=0 state=unknown state

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

信息:加载事实

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

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

错误:无法检索目录;跳过跑步

错误:无法发送报告:SSL_connect SYSCALL 返回=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

【问题讨论】:

    标签: puppet


    【解决方案1】:

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

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

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

    • 为自己生成新证书和相应的证书签名请求
    • 在下次目录请求时接受主证书和 CA 证书,并提交 CSR
    • 从主服务器接受新的签名证书

    所有的证书签名位都成功了也说明master没有以前发给这个特定代理的证书的记录,这也支持了master已经从代理下被换出的理论。

    【讨论】:

    • 非常感谢您的解释。因此,基于此解释,删除代理上的当前 ssl 目录然后再​​次运行 puppet agent -t 是否正确。我相信代理会在下一次运行时为自己创建一个新的 ssl 目录和一个新的 CA。我说的对吗?
    • @Slim,删除目录而不是将文件移出目录会产生相同的效果。对于我推断您所面临的问题,这是一个合理的缓解措施。一次。但是,如果您再次这样做,在一台成功地从主服务器检索目录的机器上,那么您会在相反的方向上产生几乎相同的问题:主服务器已经拥有相关代理的证书,会拒绝代理的新(再次)企业社会责任并拒绝提供目录。如果上述邪恶演员试图冒充您的一名特工,也会发生这种情况。
    • 非常感谢。我非常感谢您清晰简洁的解释。 ?
    【解决方案2】:

    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 证书存在所有问题并且版本之间也存在不兼容性,这取决于 puppet 版本。

    【讨论】:

    • Puppet 6 附带了中间 CA,如果您从 Puppet 5 升级到 6,这不是问题,因为 Puppet 服务器仍将使用非中间 CA,因此 Puppet 5 代理会正常工作。使用 Puppet 升级代理,然后重新生成 CA。仅当您构建新的 Puppet 6 服务器并尝试将 Puppet 5 代理连接到它时,中间 CA 才会出现问题。您永远不必删除 Puppet 服务器的 SSL 目录,您可以使用 Puppet 5 上的 puppet cert clean <nodename> 或 Puppet 6 上的 puppetserver ca clean --certname <nodename> 删除代理证书。
    • 感谢您的澄清。我切换到 Ansible,立即开始工作。我花了太多时间来启动和运行 puppet、docker 和 CentOS,这真是太可惜了。然后是版本之间的不兼容、Ruby 差异、stdlib 和所有其他类型的障碍,这使它成为一种糟糕的体验。它最终起作用了,但是在完全升级到第 7 版后,我遇到了因子编码的其他问题。尽管我确信设置时它很棒,但快速完成某事太多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2020-04-17
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多