概要

尝试同时运行标准ansible all -m pingansible all -a "pwd"时,出现以下错误(第二条命令仅在ping模块是问题的情况下):

..."module_stdout": "  File \"/tmp/ansible_C2IrV6/ansible_module_command.py\", line 183\r\n    out = b''\r\n            ^\r\nSyntaxError: invalid syntax\r\n",...

我的问题是由于通过pip进行安装,我以某种方式运行了未发行的Ansible版本(2.4.0)。 这与我的yum安装(2.3.1.0)冲突,并且与当前的Python版本(2.6.6)不兼容。

我的解决方案是卸载两个版本,以确保我的系统不再可用。 从那里,我使用yum将ansible重新安装到我知道兼容的版本(2.3.1.0)。 我还读到可以使用pip指定版本:

pip install ansible==<version>

有上安装不同版本的更多细节在这里


原始帖子

我见过很多人似乎都遇到我确切问题的情况,但最终总是有些不同。 无论如何,我尝试解决方案均无济于事。

我在RHEL6上运行Ansible 2.4.0:

$ uname -a
Linux <server address> 2.6.32-642.11.1.el6.x86_64 #1 SMP Wed Oct 26 10:25:23 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux

我正在与之通信的主机正在运行RHEL5。

当我运行此命令时:

$ sudo ansible all -a "pwd" -vvvv

我得到以下结果:

详细的Ansible输出

从上面的输出中提取ssh命令:

$ ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/root/.ssh/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o 'ControlPath=~/.ansible/cp' user@hostDestination '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

结果:

提取的Ansible SSH命令输出

根据上面的结果,似乎该命令建立了成功的连接,所以我不明白为什么Ansible会给我“ Permission Denied

编辑:感谢@KonstantinSuvorov,我能够更精确地确定我的问题–我似乎将模块故障归因于Permission Denied命令的结果,因为我使用sudo获得了最佳响应。 请参阅他的帖子,了解为什么这是一个问题。


一些附加信息

在安装Ansible的服务器上,我具有超级用户权限。 在目标主机上,我没有。

普通SSH到目标主机的工作非常正常,反之亦然。

以下是我们成功登录到此处工作的任何服务器后所看到的内容,因此在不熟悉该服务器时不要惊慌:

    ***************************************************************
    *                                                             *
    * Do not attempt to log on unless you are an authorized user. *
    *                                                             *
    * You must have a valid Network account.                      *
    *                                                             *
    ***************************************************************

如果有必要,我明天回到办公室时会提供ansible.cfg

如果这属于SuperUser,ServerFault或其他地方,请原谅我。


UPDATE

在不使用sudo的情况下运行命令:

ansible all -a "/bin/pwd" -vvvv

结果:

没有Sudo的详细Ansible命令


更新2

在我的ansible.cfg [ssh_connection]下放置ssh_args=之后:

ansible all -a "pwd"

结果:

hostDestination | FAILED! => {
    "changed": false,
    "failed": true,
    "module_stderr": "\n***************************************************************\n*                                                             *\n* Do not attempt to log on unless you are an authorized user. *\n*                                                             *\n* You must have a valid Network account.                      *\n*                                                             *\n***************************************************************\n\nConnection to hostDestination closed.\r\n",
    "module_stdout": "  File \"/tmp/ansible_C2IrV6/ansible_module_command.py\", line 183\r\n    out = b''\r\n            ^\r\nSyntaxError: invalid syntax\r\n",
    "msg": "MODULE FAILURE",
    "rc": 0
}

注意:使用Ansible的raw模块运行命令成功:

ansible all -m raw -a "pwd"

结果:

hostDestination | SUCCESS | rc=0 >>
/home/user

***************************************************************
*                                                             *
* Do not attempt to log on unless you are an authorized user. *
*                                                             *
* You must have a valid Network account.                      *
*                                                             *
***************************************************************

Shared connection to hostDestination closed.

当我查看常规命令的详细输出( -vvvv )时,我看到使用了以下模块:

Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/basic.py
Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/_text.py
Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/parsing/convert_bool.py
Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/parsing/__init__.py
Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/pycompat24.py
Using module_utils file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/module_utils/six/__init__.py
Using module file /usr/lib/python2.6/site-packages/ansible-2.4.0-py2.6.egg/ansible/modules/commands/command.py

我觉得一个或多个模块可能是问题所在,因为上面输出中的最后一行与失败命令的输出中的以下行相似:

... /tmp/ansible_C2IrV6/ansible_module_command.py\ ...

看起来Python解释器对此文件中的空二进制字符串的语法有问题。 不幸的是,Ansible在运行命令后立即删除了文件–阻止我查看183行进行自己的评估。

#1楼 票数:1 已采纳

您在root帐户下使用sudo运行ansible ,它尝试使用root帐户中的ssh-keys(不存在?)。
尝试ssh命令时,可以在当前用户帐户下运行它,并使用另一个访问密钥。

我相信您没有理由在这里使用sudo

  ask by Darrel Holt translate from so

未解决问题?本站智能推荐:

2回复

无法安装Ansible

我在Oracle VM VirtualBox管理器中安装了VM,并挂载了/ dev / sr0并在/etc/yum.repos.d下配置了system.repo,如下所示。 并从Fedora站点之一下载epel-release-latest-6.noarch.rpm来安装Ansible。
1回复

导入错误:通过 PIP 安装 Ansible 2.9 后没有名为 ansible 的模块

想知道是否有人遇到过我一直收到的相同问题: 所以我们在我们的服务器上安装了 2 个 ansible 版本,并希望在 ansible 2.9 中运行一些作业,我们为每个版本创建了单独的环境。 所以我激活了 ansible 2.9 env 然后继续运行通常的命令“ansible-playbook p
3回复

yum 更新 ansible 版本

我的 Centos 7 机器上有 ansible 1.9 版,但需要获得 1.9.2 版,因为我遇到了 ansible 和 docker 的兼容性问题。 但是,对 ansible 包进行 yum update 没有影响: 如何升级包? 编辑: 我已经按照@Eldad AK 的建议使用 pi
2回复

从二进制文件离线安装 ansible [重复]

这个问题在这里已经有了答案: 如何离线安装软件包? (11 个回答) 去年关闭。 我们有没
1回复

有效的返回码0,但仍然没有其他主机

Ansible 2.1.2.0 当我运行Plabook时,即使返回状态/代码rc为0 ,它也会出错,并且如果我打开调试(-vvv),则整个ok:输出将变为绿色(而不是红色)这是针对失败的步骤/操作)。 问题: 为什么当“ rc”:0且整个输出颜色以localhost的绿色
2回复

yum install python-setuptools 来安装 easy_install 和 ansible - 错误:AttributeError: other Python Errors

目标:在 RedHat Linux 机器上安装 ansible。 关于它是如何开始的一点概述:当我的 Linux 机器是 RedHat 5.9 (Tikanga) 时,默认的 python 安装版本是 2.4。 我尽了最大的努力,但由于 Ansible 需要 python >= 2.6,因此
2回复

使用Ansible删除多个Unix帐户

我已经写了下面ansible代码去除Unix用户帐户。 这对于单个用户来说效果很好。 但是,如果我想同时删除多个用户,是否需要为每个要删除的用户创建单独的变量,并为删除该用户创建单独的user资源。 在这种情况下,如果有多个用户,则代码将变得太长。 有什么建议么 ?
2回复

vagrant 上的 Ansible 错误中没有模块名称 Yum

我正在 Ubuntu Vagrant 机器上尝试使用 Ansible playbooks 进行一些实验。 我编写了一个名为 exampleyum.yml 的简单剧本,如下所示: 当我跑 我收到以下错误: 任务执行过程中发生异常。 要查看完整的回溯,请使用 -vvv。 错误是:Impor