【问题标题】:Missing become password when sudoingsudo 时缺少成为密码
【发布时间】:2016-02-24 22:47:55
【问题描述】:

当我尝试在我的 Ansible playbook 中使用 sudo 运行任务时,我看到一条错误消息。

这是我的剧本:

---
- hosts: production
  gather_facts: no
  remote_user: deployer
  become: yes
  become_method: sudo
  become_user: root

  tasks:
    - name: Whoami
      command: /usr/bin/whoami

我希望 whoami 是 root 但任务失败并显示错误消息:

» ansible-playbook -i ansible_hosts sudo.yml --ask-sudo-pass
SUDO password: [I paste my sudo password here]

PLAY [production] *************************************************************

GATHERING FACTS ***************************************************************
fatal: [MY.IP] => Missing become password

TASK: [Whoami] ****************************************************************
FATAL: no hosts matched or all hosts have already failed -- aborting

当我手动 ssh 进入盒子并尝试 sudo 时,它按预期工作:

» ssh deployer@production
» sudo whoami
[I paste the same sudo password]
root

部署者用户密码由 Ansible 设置如下(在不同的剧本中):

- hosts: production
  remote_user: root

  # The {{ansible_become_pass}} comes from this file:
  vars_files:
    - ./config.yml

  tasks:

    - name: Create deployer user
      user: name=deployer uid=1040 groups=sudo,deployer shell=/bin/bash password={{ansible_become_pass}}

{{ansible_become_pass}} 是我希望使用以下 python sn-p 散列的密码:

python -c 'import crypt; print crypt.crypt("password I desire", "$1$SomeSalt$")'

"password I desire" 替换为密码,"$1$SomeSalt$" 是随机盐。

我使用的是 Ansible 1.9.4 版。

有什么问题?

【问题讨论】:

  • 我尝试了你的两个剧本,他们在 ansible 1.9.2 中为我工作。我所做的唯一更改是设置 ansible 用户密码,我只是将值粘贴到而不是从另一个文件中包含它。我无法想象这会有所作为。我只是在使用我的工作站并连接到 localhost。
  • 可能是您的版本中的一个错误,将 --ask-sudo 开关与您的剧本中的 become 语法混合在一起?我尝试了 --ask-sudo 和 --ask-become 并且都有效。

标签: ansible sudo


【解决方案1】:

我试过你的版本和剧本,只有--ask-pass,它返回"stdout": "root"结果。

您必须将--ask-sudo-pass 替换为--ask-pass。并确保您的部署者用户具有 root 权限。

$ ./bin/ansible --version
ansible 1.9.4
$ ./ansible/bin/ansible-playbook -vv pl.yml --ask-pass 
SSH password: 

PLAY [localhost] ************************************************************** 

TASK: [Whoami] **************************************************************** 
<localhost> REMOTE_MODULE command /usr/bin/whoami
changed: [localhost] => {"changed": true, "cmd": ["/usr/bin/whoami"], "delta": "0:00:00.002555", "end": "2015-12-05 07:17:16.634485", "rc": 0, "start": "2015-12-05 07:17:16.631930", "stderr": "", "stdout": "root", "warnings": []}

PLAY RECAP ******************************************************************** 
localhost                  : ok=1    changed=1    unreachable=0    failed=0   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2019-01-14
    • 2019-05-13
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多