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

时间:2017-09-15 17:55:51

标签: ansible ansible-2.x

是否可以准确知道以下Ansible代码将在远程服务器上执行的命令

<span class="boldedText" id="hymSpmCoordsID">\n  <!-- To Be DB Generated //-->\n</span>

我相信用户应该拥有相应的sudo权限。但是,我一直在- name: Ensure apache is running service: name=httpd state=started become: true

更新#1

根据提供的评论,这是我完整的Ansible命令:

sudo: a password is required
  • userB是已配置SSH密钥的远程用户
  • userB具有有限的sudo权限。不幸的是,我无法改变这一点,我不是服务器管理员。
  • userB目前已配置为通过SSH / Key访问一堆服务器,它似乎是Ansible的主要候选者。我目前能够通过SSH(Apache,Tomcat,Jenkins等)手动管理我的所有中间件,并希望使用Ansible自动化它。

1 个答案:

答案 0 :(得分:0)

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

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

  1. 为Ansible提供密码:

    ansible-playbook -K secretpassword ...
    
  2. 修改远程主机上的sudoers配置以允许无密码sudo

    remoteuser ALL=(ALL)    NOPASSWD:ALL
    
  3. 涉及一组有限命令的Sudo配置可能无效,因为Ansible正在使用sudo运行脚本。例如,如果我针对以下剧本运行ansible-playbook -vvv

    - hosts: localhost
      gather_facts: false
      tasks:
        - ping:
          become: true
    

    我会看到:

    <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'"'"''
    

    换句话说,ansible正在运行:

    sudo -H -S -n -u root /bin/sh -c '...embedded script here...'
    

    sudo唯一看到的命令是/bin/sh,这意味着只限某些命令的sudo配置注定要失败。

    如果您无法修复远程sudo配置,则可能需要调查ansible的raw模块。