Ansible和;sudo su-“;

Ansible和;sudo su-“;,ansible,Ansible,我正在尝试创建一个ansible剧本,它将在我当前的工作环境中工作。我使用ssh密钥以用户“myuser”的身份登录服务器。我从来没有收到过密码,所以我不知道。我运行的大多数命令都是作为不同的非root用户执行的,例如“appadmin”。我通过“sudosu-appadmin”成为这些用户,因为我也没有这个用户的密码 我尝试过的不同变体要么抱怨“sudo:需要密码”,要么在12秒后超时。我将展示第二个示例 剧本非常简单: --- - hosts: sudo-test gather_fact

我正在尝试创建一个ansible剧本,它将在我当前的工作环境中工作。我使用ssh密钥以用户“myuser”的身份登录服务器。我从来没有收到过密码,所以我不知道。我运行的大多数命令都是作为不同的非root用户执行的,例如“appadmin”。我通过“sudosu-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
在这一点上,我同意playbook和inventory的配置是正确的。我认为问题在于/etc/sudoers不允许我的“appadmin”用户以允许我利用ansible的能力成为另一个用户的方式运行。描述了类似的场景和限制

/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 *

这听起来正确吗?

我没有发现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
试试这个:

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

使用
-vvvv
运行Ansible命令,查看Ansible运行sudo的确切命令。这另一个答案可能会给我们一些启示,但这是一个不同的场景:。这将有助于诊断问题。要修复它,您可能需要更改服务器的配置,或者您可以使用不同的“谢谢您的建议”。在详细模式下运行会产生相当多的输出,但我认为最相关的代码片段如下:``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''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''。这是ansible权限提升的一个已知限制:即不限于某些命令(这是您的情况)。谢谢您的建议。我取消了注释字段并将其更改为60秒,但行为上唯一的变化是超时错误发生在62秒之后,而不是12秒之后。在Google中翻找,似乎这可能限制了“appadmin”用户在“appserver”主机上的/etc/sudoers中的设置方式。现在相关的条目是“(root)NOPASSWD:/bin/su-appadmin”,这可能有问题。不幸的是,是另一个团队控制着sudo访问,所以如果是这样的话,我可能就倒霉了。