【问题标题】:Ansible 1.9.1 'become' and sudo issueAnsible 1.9.1“成为”和 sudo 问题
【发布时间】:2015-04-30 11:11:55
【问题描述】:

我正在尝试运行一个非常简单的剧本来测试新的 Ansible 设置。

在我的 ansible.cfg 文件中使用“新”Ansible 权限升级配置选项时:

[defaults]

host_key_checking=false

log_path=./logs/ansible.log
executable=/bin/bash

#callback_plugins=./lib/callback_plugins

######

[privilege_escalation]
become=True
become_method='sudo'
become_user='tstuser01'
become_ask_pass=False

[ssh_connection]
scp_if_ssh=True

我收到以下错误:

fatal: [webserver1.local] => Internal Error: this module does not support running commands via 'sudo'

FATAL: all hosts have already failed -- aborting

剧本也很简单:

# Checks the hosts provisioned by midrange
---
- name: Test su connecting as current user
  hosts: all
  gather_facts: no
  tasks:
  - name: "sudo to configued user -- tstuser01"
    #action: ping
    command: /usr/bin/whoami

我不确定 Ansible 1.9.1 中是否有问题,或者我做错了什么。当然,Ansible 中的“命令”模块允许将命令作为 sudo 运行。

【问题讨论】:

    标签: bash sudo ansible ansible-playbook


    【解决方案1】:

    问题在于配置;我也以it 为例,遇到了同样的问题。玩了一段时间后,我注意到以下工作:

    1) 已弃用 sudo:

    ---
    - hosts: all
      sudo: yes
      gather_facts: no
      tasks:
      - name: "sudo to root"
        command: /usr/bin/whoami
    

    2) 新become

    ---
    - hosts: all
      become: yes
      become_method: sudo
      gather_facts: no
      tasks:
      - name: "sudo to root"
        command: /usr/bin/whoami
    

    3) 使用 ansible.cfg:

    [privilege_escalation]
    become = yes
    become_method = sudo
    

    然后在剧本中:

    ---
    - hosts: all
      gather_facts: no
      tasks:
      - name: "sudo to root"
        command: /usr/bin/whoami
    

    既然你“变成”了tstuser01(不是我这样的root),请玩一下,可能用户名也不应该被引用:

      become_user = tstuser01
    

    至少这是我在 ansible.cfg 中定义 remote_user 的方式,它可以工作...我的问题已解决,希望你也是

    【讨论】:

    • 问题肯定是ansible.cfg中become_user和become_method选项的引号。 rpm 示例错误地包含引号;删除引号会使其工作。
    • 我使用了这个“成为:是的成为用户:root成为_方法:sudo”但仍然显示令人讨厌的弃用警告......
    【解决方案2】:

    我认为您应该在 hosts 部分使用 sudo 指令,以便后续任务可以使用 sudo 权限运行,除非您在任务中明确指定 sudo:no

    这是你的剧本,我已经修改为使用 sudo 指令。

    
    # Checks the hosts provisioned by midrange
    ---
    - hosts: all
      sudo: yes
      gather_facts: no
      tasks:
        - name: "sudo to configued user -- tstuser01"
          command: /usr/bin/whoami
    

    【讨论】:

    • 据我阅读,它与在 RHEL 6 主机上运行 Ansible 和不支持 ControlPersist 的旧版本 OpenSSH 有关。我还在调查。不过,我明天会试试这个。似乎在 Ansible 1.9.0 及更高版本中不推荐使用 sudo 配置选项。
    • 原来我们用 ControlPersist 功能修补了 OpenSSL。
    • 与'new' Ansible 'become' 语法相关的问题。旧的 'sudo: yes' 工作正常。
    • -R SU_USER, --su-user=SU_USER 使用 su 作为该用户运行操作(默认=root)(已弃用,使用 become) -s, --sudo 使用 sudo 运行操作(nopasswd) (已弃用,使用成为)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2014-03-19
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多