我需要能够登录远程服务器,切换用户,然后执行任何需要的事情。
我玩了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