【发布时间】: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 并且都有效。