尝试同时运行标准ansible all -m ping
和ansible 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
我得到以下结果:
从上面的输出中提取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
将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行以进行自己的评估。
答案 0 :(得分:1)
您在root帐户下使用ansible
运行sudo
并尝试使用root帐户中的ssh-keys(不存在?)。
当您尝试ssh
命令时,在当前用户帐户下运行它并使用另一个访问密钥。
我相信你没有理由在这里使用sudo
。