网站搜索

如何修复“与 x.x.xx 的共享连接已关闭”Ansible 错误


在这篇短文中,我们将解释如何解决:“module_stderr”:“与 x.x.x.x 的共享连接已关闭。\r\n”、“module_stdout”:“/bin/sh: /usr/ bin/python: 运行 Ansible 命令时没有这样的文件或目录\r\n”。

以下屏幕截图显示了 Ansible 模块错误。我们在运行 Ansible 命令以在两台新部署的 CentOS 8 服务器上执行命令时遇到此错误。

从错误详细信息来看,连接失败,因为远程系统中的 shell 找不到 Python 解释器 (/usr/bin/python),如下所示该行:“module_stdout”:“/bin/sh:/usr/bin/python:没有这样的文件或目录\r\n”。

检查远程主机后,我们发现系统没有安装Python 2

他们默认安装了Python 3,其二进制文件是/usr/bin/python3

根据 Ansible 文档,Ansible2.5 及更高版本)仅适用于 Python 版本 3 及更高版本。此外,Ansible 应该能够在许多附带的平台上自动检测和使用 Python 3。

但是,如果失败,您可以通过将组或主机级别的 ansible_python_interpreter 库存变量设置为 Python 3 解释器的位置来显式配置 Python 3 解释器,如下所述。

在命令行上将 Python 解释器传递给 Ansible

要暂时修复上述错误,您可以使用 -e 标志将 Python 3 解释器传递给 Ansible,如下所示。

ansible prod_servers  -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root

在清单中设置 Ansible 的 Python 解释器

要永久修复该错误,请在清单 /etc/ansible/hosts 中设置 ansible_python_interpreter 库存变量。您可以使用 v/im 或 nano 文本编辑器打开它进行编辑,如图所示。

sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

将以下行附加到组中的每个主机或主机:

ansible_python_interpreter=/usr/bin/python3

因此,您的主机的定义可以如下所示:

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6

或者,为一组主机设置相同的 Python 解释器,如图所示。

[prod_servers]
192.168.10.1		
192.168.10.20		

[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3

在 Ansible 配置中设置默认 Python 解释器

要设置默认的Python解释器,您可以在Ansible的主配置文件/etc/ansible/ansible.cfg中设置ansible_python_interpreter库存变量。

sudo vim /etc/ansible/ansible.cfg

[defaults] 部分下添加以下行。

ansible_python_interpreter=/usr/bin/python3

保存文件并关闭它。

现在尝试再次运行 Ansible 命令:

ansible prod_servers -a "systemctl status firewalld" -u root

有关此主题的更多信息,请参阅 Ansible 官方文档中的 Python 3 支持。