在执行ansible剧本的时候遇到这样一个报错,意思是这个命令必须在root用户下执行。因为我这个错误是在执行roles时遇到的,这里就说一下我找到的解决方法。
一、问题
报错提示:”FAILED! => {"changed": false, "msg": "This command has to be run under the root user.", "results": []}“
如下所示:
二、问题分析
这个问题其实是因为我是通过目标主机的普通用户去执行ansible命令的,这里就涉及到一个权限的问题,我这里是想通过dnf安装chrony服务。所以需要root权限去执行dnf安装命令。所以只需要将普通用户提权到root用户就可以。
三、解决方法
方法一、在执行ansible命令时通过”-b“ 参数启用提权,这里需要在hosts清单文件中指明root的密码ansible_become_pass="密码"或者使用--become-password-file指定存有root用户密码的文件。
命令如下:ansible-playbook -b chrony.yml --become-password-file testpasswd
命令注解:
-b : 启用sudo提权
--become-password-file : 指定root用户密码文件testpasswd
不使用--become-password-file参数情况下,可以在主机清单文件hosts中指定root用户的密码,如下所示:
注解:
ansible_become_pass :root用户的密码
ansible_ssh_pass :普通用户的密码
方法二、不使用”-b“ 参数启用提权,在yaml文件中使用become来启用提权。需要在hosts清单文件中指明root的密码ansible_become_pass="密码"或者使用--become-password-file指定存有root用户密码的文件
如下所示:
效果如下: