Ansible 服务和系统D模块要求输入sudo密码

Ansible 服务和系统D模块要求输入sudo密码,ansible,Ansible,我遇到一个问题,Ansible服务模块由于sudo密码问题而失败: fatal: [192.168.1.10]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to 192.168.1.10 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE",

我遇到一个问题,Ansible服务模块由于sudo密码问题而失败:

fatal: [192.168.1.10]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Shared connection to 192.168.1.10 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "rc": 1}
to retry, use: --limit @/Volumes/HD/Users/user/Ansible/playbooks/stop-homeassistant.retry
我的剧本只有一个任务,停止服务。它看起来像:

---
- hosts: 192.168.1.10
  tasks:
    - name: Stop Homeassistant
      become: true
      service: name=home-assistant@homeassistant state=stopped enabled=yes
或者,在systemd的情况下:

      systemd: state=stopped name=home-assistant@homeassistant enabled=yes
我是这样运行剧本的:

ansible-playbook -u homeassistant playbooks/stop-homeassistant.yml
但是,在该框中(在/etc/sudoers.d中)为该用户设置了无密码sudo:

如果我以homeassistant的身份ssh进入该框,然后运行:

 sudo systemctl stop home-assistant@homeassistant
家-assistant@homeassistant服务将完全停止,无需请求sudo密码


你知道为什么systemctl命令可以作为用户在机器上完美运行,但在服务/systemd模块中失败了吗?

尝试在目标机器上配置无密码sudo:

homeassistant ALL=NOPASSWD: ALL
使用
/etc/sudoers
中的
NOPASSWD
标志配置特定命令不适用于Ansible


此处的详细信息:

好的,请按以下方式修改您的剧本:

主机:192.168.1.10
远程用户:家庭助理
变成:真的
方法:sudo
成为用户:root
任务:
-姓名:Stop Homeassistant
变成:真的
服务:name=home-assistant@homeassistant状态=已停止启用=是

现在,

以ansible playbook的身份运行

如果上述命令因密码原因失败,请按


ansible playbook playbook.yml--user=--extra vars“ansible_sudo_pass=“

您是否获得与服务模块相同的故障?尝试通过
-vv
-vvv
@OrtomalaLokni进行调试是的,相同的故障。在这一点上,似乎更深入地了解了ansible与systemd的交互方式。如果服务停止,并且我运行了停止服务的playbook,它就会工作。如果我用启动服务运行它,我会失败,反之亦然。。。换句话说,如果服务启动,我运行启动该服务的playbook,它就会工作。如果我运行停止服务,我就会失败。看起来Ansible实际上不会影响任何事情。@Kyslik看到我上面的消息了。在成功场景中,Ansible返回的消息是一条良好的状态消息。在失败中,这是一条失败消息SSH:EXEC SSH-vvv-C-o ControlMaster=auto-o…ipe\r\n错误2:从主机0收到退出状态\r\n')致命:[192.168.1.10]:失败!=>{“更改”:false,“失败”:true,“调用”:{“模块参数”:{“守护程序重新加载”:false,哇,很高兴知道。不幸的是,id不能解决我的问题。相同的结果,但现在我必须输入homeassistant的密码。我也不明白为什么我必须输入密码,而我在ssh中不必输入密码。这不是-u的作用吗?它要求密码,因为我们明确指定了它。您的修改回答有效!但是,我的策略是尽可能避免使用root,只给homeassistant用户足够的权限来执行它的操作。然后我开始缩减指令,发现不同之处在于BEN_方法。出于某种原因,我需要将该指令放在playbook中。因此,现在我原来的playbook使用-u标志运行带有“been_method:sudo”的ile现在可以工作了。我不完全理解为什么,因为默认的been_方法已经是sudo了,但我很高兴它现在可以工作了。谢谢!
homeassistant ALL=NOPASSWD: ALL