我是Ansible的新手,我试图将我的分布式shell脚本“重写”到Ansible。通常,我已将ssh密钥从我的一台服务器交换为其他服务器(user1用户)。该用户在所有这些客户端上都具有sudo权限(执行“ sudo bash”)。我需要在所有这些主机上以第二个用户(user2)身份运行一些命令。所以我的脚本看起来像:
hosts="hosts.txt"
while read line;
do
ssh user1@${line} bash << EOF
sudo bash << EOT
su - user2 << EOS
/path/to/command arg1 arg2
EOS
EOT
EOF
done < ${hosts}
有什么可行的方法吗?
我发现有一种方法可以成为/ become_user,但这与sudo有关,并且user2没有任何sudo权限。
解决方案是否授予user1 sudo权限,使其能够像user2一样执行/ path / to / command?还有其他方法可以避免添加新的sudo权限吗?
答案 0 :(得分:0)
仅作为概念证明,将主机放入https://www.ibm.com/developerworks/data/library/techarticle/dm-1401sqltrace/index.html中的hosts.txt
中,并在以下剧本中进行尝试:
---
- hosts:
- all
remote_user: user1
tasks:
- name: your task
shell: '/path/to/command arg1 arg2'
become: True
become_user: user2
register: output
- name: DEBUG
debug:
var: output
执行应使用ansible-playbook your_playbook.yml
。
如果您的/etc/sudoers
有点丑陋,并且无法正常工作,那么您可以将任务your task
替换为以下内容:
- name: your task
shell: 'sudo bash -c "su - user2 -c \"/path/to/command arg1 arg2\""'
register: output
答案 1 :(得分:0)
我认为您不应该拆分包含 su 和 command 的行,而应该选择类似以下内容的
su - user2 -c '/path/to/command arg1 arg2'
如果 user2 需要其GNU / Bash环境,则可以将行更改为:
bash -c "su - user2 -c '/path/to/command arg1 arg2'"