Ansible:尝试切换用户时会失败(超时错误)



我需要能够登录远程服务器,切换用户,然后执行任何需要的事情。

我玩了Ansible并找到了"成为"工具,所以我尝试了一下,毕竟...它允许DZDO。

我的剧本变成了这样的事情:

- name: Create  empty  file
  file: path=touchedFile.txt  state=touch
  become: true
  become_method: dzdo
  become_user: userid

我跑了它并得到了:"对不起,用户某些用户不允许执行'/bin/sh -c echo将成为核心-xklihidlmxpfvvxxxxnbquvsqrgfjlyrsah;/usr/usr/bin/python/tmp/sible-tmp/ansible-tmp-1513185770.1.1-1-525257183833499999。

mmm ...我认为也许它试图执行这样的事情:

dzdo touch touchedFile.txt

不幸的是,它在我的公司中不起作用。该政策迫使我们自己登录,然后切换到所需的用户:

dzdo su - userid

我进行了一些研究,并尝试在一个块中运行多个命令,我的逻辑认为,如果我先切换用户,那么其他所有用户将被执行为其他用户。我的剧本已更新,看起来像这样:

- name: Create  empty  file
  shell: |
    dzdo su - userid
    touch  touchedFile.txt

它失败了,然后我尝试了:

- name: Create  empty  file
  command: "{{ item }}"
  with_items:
    - dzdo su - userid
    - touch  touchedFile.txt

又失败了...两种方法都会创建touchedfile.txt,但作为我的用户,而不是他们应该...

有没有办法直接使用Ansible来做我需要的事情?还是我需要开始寻找更复杂的替代方案?在过去

编辑2018-01-08:我现在可以使用" sudo su - userid"而无需密码;但是某种程度上,Ansible总是期望用户的输入,暂停会发生,我的游戏失败了:

fatal: [240]: FAILED! => {
    "failed": true, 
    "msg": "Timeout (12s) waiting for privilege escalation prompt: "
}

我注意到的一件事是,Ansible正在做以下操作:

EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no
 -o 'IdentityFile="./.ssh/fatCamel"' -o KbdInteractiveAuthentication=no
 -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
 -o PasswordAuthentication=no -o User=login_userid -o ConnectTimeout=10
 -o ControlPath=/Users/local_userid/.ansible/cp/446eee77f4
 -tt server_url '/bin/sh -c '"'"'sudo su - sudo_userid -u root /bin/sh
 -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-hsyxhtaoxiepyjexaffecfiblmjezopu;
 /usr/bin/python /u/users/login_userid/.ansible/tmp/ansible-tmp-1515438271.05-219108659465262/command.py;
 rm -rf "/u/users/login_userid/.ansible/tmp/ansible-tmp-1515438271.05-219108659465262/"
 > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"''

这部分是我引起的注意 sudo su -sudo_userid -u root

如果我尝试在服务器中运行它(复制&粘贴)也会失败...为什么Ansible添加" -u root",并且有没有办法防止它这样做?我将永远不会被授予对任何服务器的root访问。

另外,我正在设置 ansible_become_pass 变量为正确的值...但是它仍然失败。

顺便说一句,我检查了几个错误的错误(例如https://github.com/ansible/ansible/sible/issues/23921),我的错误是相似的,但是它们的工作措施与我的工作无效案例。

任何帮助将不胜感激!

我终于找到了一个解决问题的工作,我分享了这个答案,以防有人觉得它有用。

Ansible成为模块很棒,但是对于我的公司而言,它无法正常工作。正如我在问题中所解释的那样,它在sudo末尾添加了" -U root ",这使整个命令失败。

我能够使其与以下片段一起使用:

- name: Create empty file as sudo_userid
  command: "sudo su - sudo_userid -c 'touch touchedFile.txt'"

我做了几次测试,所有测试都奏效了!我什至没有明显的警告!

所以,欢呼大家!

此剧本在您有限的测试用例中对我有效,我不确定它在较大/更复杂的任务或模块上的功能如何。它基本上只是在您网站的DZDO/sudo限制周围工作。

---
- hosts: 127.0.0.1
  become: yes
  become_method: dzdo
  become_flags: "su - root -c"
  gather_facts: no
  tasks:
  - name: Create  empty  file
    file: path=touchedFile.txt  state=touch

最新更新