Ansible和“ sudo su-”

时间:2019-11-01 13:56:29

标签: ansible

我正在尝试创建一个能在我当前的工作环境中正常工作的有趣的剧本。我使用ssh密钥以用户“ myuser”的身份登录服务器。我从未得到过密码,所以我不知道。我运行的大多数命令都是以其他非root用户身份执行的-例如“ appadmin”。我也通过“ 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

似乎我必须让sysadmin将此更改为:

User myuser may run the following commands on this host:
    (root) NOPASSWD: /bin/su - appadmin *

听起来不错吗?

2 个答案:

答案 0 :(得分:0)

我找不到yaml的任何问题,实际上我在ansible2.8环境中对其进行了测试。

---
- hosts: node1
  gather_facts: False
  remote_user: ansible
  become: yes
  become_user: testuser
  tasks:
    - name: who
      shell: whoami
      register: output

    - debug: var=output

和库存:

[node1]
node1.example.com ansible_become_method=su ansible_become_exe="sudo su"

输出:

TASK [debug] ****************************************************************************************************************************
ok: [node1.example.com] =>

我会要求您在ansible.cfg文件中增加ssh计时器(取消注释超时行并将其设置为60,无论您希望秒数如何),并在这种情况下观察者。

# SSH timeout
#timeout = 300

答案 1 :(得分:0)

试试这个:

- hosts: application
  become: yes
  become_exe: "sudo su - appadmin"
  become_method: su
  tasks: