获取正在执行的准确 Ansible 命令

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)
  • userB 是已配置指定 SSH 密钥的远程用户
  • userB 具有有限的 sudo 权限。不幸的是,我无法更改此设置,我不是服务器管理员。
  • userB 目前已配置为通过 SSH/Key 访问一堆服务器,它似乎是 Ansible 的主要候选者。我目前可以通过 SSH(Apache、Tomcat、Jenkins 等)手动管理所有中间件,并希望使用 Ansible 实现自动化。

lar*_*sks 3

第一个问题(“是否可以准确地知道以下 Ansible 代码将在远程服务器上执行什么命令?”)的答案通常是“仅通过检查相应模块的源代码”。给定模块可以运行多个命令以完成其操作。

您看到的错误消息(“ sudo: a password is required.”)并不表明远程用户没有适当的sudo权限。它仅表明远程用户未配置为无密码sudo。您的两个选择是:

  1. 为 Ansible 提供密码:

    ansible-playbook -K secretpassword ...
    
    Run Code Online (Sandbox Code Playgroud)
  2. 修改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 的原始模块。