Ansible 解压模块失败:“无法验证 SSL 证书”

Ansible 解压模块失败:“无法验证 SSL 证书”

最近我一直在改变使用 Ansible 配置的客户端机器上的 Python 环境的设置方式。

这涉及到最小化在系统 Python 安装(在 Ubuntu 14.04 客户端上)中安装和配置的软件包数量,以避免在客户端机器随后用于开发活动时出现库冲突的可能性。

自从做了这个改变以来,我一直遇到问题unarchiveAnsible 模块remote_src如果与 HTTPS URL 结合使用,则无法验证 SSL 证书。

失败的命令示例如下:

- name: Get and untar opus-1.1.2
  unarchive:
    src="http://downloads.xiph.org/releases/opus/opus-1.1.2.tar.gz"
    dest="/opt/library-sources"
    remote_src=yes

运行时,上述命令失败并显示以下错误消息:

fatal: [10.0.0.90]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to validate the SSL certificate for downloads.xiph.org:443. Make sure your managed systems have a valid CA certificate installed. If the website serving the url uses SNI you need python >= 2.7.9 on your managed machine or you can install the `urllib3`, `pyopenssl`, `ndg-httpsclient`, and `pyasn1` python modules to perform SNI verification in python >= 2.6. You can use validate_certs=False if you do not need to confirm the servers identity but this is unsafe and not recommended. Paths checked for this platform: /etc/ssl/certs, /etc/pki/ca-trust/extracted/pem, /etc/pki/tls/certs, /usr/share/ca-certificates/cacert.org, /etc/ansible"}

我对此错误的理解是缺少所unarchive依赖的 Python 库。

我无法从任何 Ansible 文档中弄清楚这些包是否是服务器计算机(负责运行 Ansible 脚本)和/或客户端计算机(在其上执行 Ansible 脚本中详述的任务)上的 Python 环境的要求。

需要注意的是,我在服务器机器上安装了 Ansible(也运行 Ubuntu 14.04),通过pip它还安装了错误消息中提到的以下版本的软件包:

urllib3==1.7.1
ndg-httpsclient==0.4.3
pyasn1==0.4.2
pyOpenSSL==0.13

这使我相信客户端机器和服务器都可能需要这些包。

有人知道哪些机器(服务器和/或客户端)需要这些包吗?我还想知道这在哪里记录,因为它可能会在我的 Ansible 脚本的其他地方引发问题。

答案1

您应该知道unarchive发生在 ansible 管理的服务器上,而不是你运行它的机器上,当remote_src=yes并且src是一个 URL 时。

您还应该知道,访问http://downloads.xiph.org/重定向至https://downloads.xiph.org/这是一个安全的网站,它会进一步重定向到https://ftp.osuosl.org/pub/xiph/如果你能到达那么远的话。

因此,SSL 证书验证在该服务器上进行,并且执行该验证所需的软件和 CA 证书必须位于该服务器上。此外,它们必须是系统软件包,而不是您自己安装的软件包pip。您应该确保安装这些先决条件是您运行的最早配置任务之一。

相关内容