问题:
[student@workstation asd]$ ansible servera -m ping
servera | FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"module_stderr": "Shared connection to servera closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1
}
配置文件
[student@workstation asd]$ cat ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = false
remote_user = student
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = False
[student@workstation asd]$ cat inventory
servera
原因:become_ask_pass = False 参数设置了免密提权
方法
方法一
如果将become_ask_pass参数设置为true,则可以正确运行,如下:
[student@workstation asd]$ cat ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = false
remote_user = student
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = true
[student@workstation asd]$ ansible servera -m ping
BECOME password:
servera | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
方法二
设置servera客户机的提权配置:
步骤一:进入servera客户机,切换root用户
步骤二:进入 /etc/目录下,使用vim编辑sudoers文件
然后使用“:wq!”保存,不会真有人不保存吧
结果
[student@workstation asd]$ ansible servera -m ping
servera | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
误区与补充
网上大多数解决办法都是关于客户机和控制机python版本不一样
针对Ansible的环境
# 管理主机 和 被管理主机 # Python版本“一定”要一致
# 系统 和 Ansible的版本 最好一致
rhel 使用rhel的版本 其他系统 使用社区版本
在rhel8系统,ansible会自动的根据你的平台的python版本去选择。
[student@workstation ~]$ yum list platform-python
如果你是rhel系统,需要使用订阅命令通过RHN连到红帽的软件仓库进行下载安装。
如果你不懂修改sudoers文件的原理可以搜,有很多博客,在这里推荐一个,如果有问题可以评论提,看到会回复。