Ansible模块失败 - 未知原因

时间:2017-08-16 00:42:40

标签: pip ansible yum rhel6

概要

尝试同时运行标准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)不兼容。

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

pip install ansible==<version>

有关安装不同版本here

的详细信息

原始邮寄

我见过许多人似乎有我确切问题的情况,但它总是会有些不同。无论如何,我尝试解决方案都没有用。

我正在使用我认为是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

我得到以下结果:

Verbose Ansible Output

从上面的输出中提取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'"'"''

结果:

Extracted Ansible SSH Command Output

基于上面的结果,似乎命令成功连接,所以我不明白为什么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或其他地方。

更新

在没有sudo的情况下运行命令:

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

结果:

Verbose Ansible Command Without Sudo

更新2

ssh_args=放在[ssh_connection]下的ansible.cfg下:

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 个答案:

答案 0 :(得分:1)

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

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