【发布时间】:2019-11-01 13:56:29
【问题描述】:
我正在尝试创建一个适用于我当前工作环境的 ansible playbook。我使用 ssh 密钥以用户“myuser”的身份登录服务器。我从来没有给过密码,所以我不知道。我运行的大多数命令都是以不同的非 root 用户身份执行的——例如“应用管理员”。我通过“sudo su - appadmin”成为这些用户,因为我也没有这个用户的密码。
我尝试过的不同变体要么抱怨“sudo:需要密码”,要么在 12 秒后超时。我将展示第二个示例。
剧本很简单:
---
- hosts: sudo-test
gather_facts: False
remote_user: myuser
become: yes
become_user: appadmin
tasks:
- name: who
shell: whoami > qwert.txt
我的主机入口如下:
[sudo-test]
appserver.example.com ansible_become_method=su ansible_become_exe="sudo su"
这是我得到的错误:
pablo@host=> ansible-playbook test_sudo.yml
PLAY [sudo-test] ****************************************************************************************************
TASK [who] **********************************************************************************************************
fatal: [appserver.example.com]: FAILED! => {"msg": "Timeout (12s) waiting for privilege escalation prompt: "}
to retry, use: --limit @/home/pablo/ansible_dir/test_sudo.retry
PLAY RECAP **********************************************************************************************************
appserver.example.com : ok=0 changed=0 unreachable=0 failed=1
此时我同意剧本和库存配置正确。我认为问题在于 /etc/sudoers 不允许我的“appadmin”用户以允许我利用 ansible 成为另一个用户的能力的方式运行。 This thread 描述了类似的场景和限制。
/etc/sudoers 的相关部分如下所示:
User myuser may run the following commands on this host:
(root) NOPASSWD: /bin/su - appadmin
看来我必须让系统管理员将其更改为:
User myuser may run the following commands on this host:
(root) NOPASSWD: /bin/su - appadmin *
这听起来对吗?
【问题讨论】:
-
使用
-vvvv运行 Ansible 命令以查看 Ansible 执行 sudo 的确切命令。这个其他答案可能会有所启发,但它适用于不同的场景:stackoverflow.com/a/56721207/608820。这将有助于诊断问题。要修复它,您可能需要更改服务器的配置,或者您可以使用不同的become_method -
感谢您的建议。在详细模式下运行会产生相当多的输出,但我认为最相关的 sn-p 如下:```ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications =gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=pmena -o ConnectTimeout=10 -o ControlPath=/home/pablo/.ansible/cp/b70630738d -tt appserver.example。 com /bin/sh -c '"'"'sudo su - ooiui -c '"'"'"'"'"'"'"'"'/bin/sh -c '"'"'"'"' "'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-* `
-
这行不通。这是 ansible 权限提升的已知限制:it must be general 即不限于某些命令(这是您的情况)。
标签: ansible