Tek*_*kus 8 ansible ansible-2.x
是否可以准确知道以下 Ansible 代码将在远程服务器上执行什么命令
- name: Ensure apache is running
service: name=httpd state=started
become: true
Run Code Online (Sandbox Code Playgroud)
我相信用户应该拥有适当的 sudo 权限。然而,我不断得到sudo: a password is required。
更新#1
根据提供的评论,这是我的完整 Ansible 命令:
ANSIBLE_KEEP_REMOTE_FILES=1 sudo -u userA ansible-playbook ssl_playbook.yml -i inventories/staging --extra-vars "target=my_server_set" --private-key=/path/to/ssh.key --u userB -vvv
Run Code Online (Sandbox Code Playgroud)
第一个问题(“是否可以准确地知道以下 Ansible 代码将在远程服务器上执行什么命令?”)的答案通常是“仅通过检查相应模块的源代码”。给定模块可以运行多个命令以完成其操作。
您看到的错误消息(“ sudo: a password is required.”)并不表明远程用户没有适当的sudo权限。它仅表明远程用户未配置为无密码sudo。您的两个选择是:
为 Ansible 提供密码:
ansible-playbook -K secretpassword ...
Run Code Online (Sandbox Code Playgroud)修改sudoers远程主机上的配置以允许无密码sudo:
remoteuser ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)涉及有限命令集的 Sudo 配置可能不起作用,因为 Ansible正在使用sudo. 例如,如果我运行ansible-playbook -vvv以下剧本:
- hosts: localhost
gather_facts: false
tasks:
- ping:
become: true
Run Code Online (Sandbox Code Playgroud)
我再看看吧:
<localhost> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/lars/.ansible/cp/8a5a4c6a60 -tt localhost '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-rebjujbhceobxvfuylirykxzgdonillt; /usr/bin/python /home/lars/.ansible/tmp/ansible-tmp-1505503292.11-47458712165303/ping.py; rm -rf "/home/lars/.ansible/tmp/ansible-tmp-1505503292.11-47458712165303/" > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"''
Run Code Online (Sandbox Code Playgroud)
换句话说,ansible正在运行:
sudo -H -S -n -u root /bin/sh -c '...embedded script here...'
Run Code Online (Sandbox Code Playgroud)
唯一sudo看到的命令是/bin/sh,这意味着sudo限制您只能使用某些命令的配置注定会失败。
如果您无法修复远程sudo配置,您可能需要研究 ansible 的原始模块。
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |