如何让 Ansible 在询问 sudo 密码之前显示主机名?



我有一个 Ansible 剧本来更新我的基于 Debian 的服务器。出于简单和安全原因,我不想使用保管库作为密码,也不想将它们存储在可公开访问的配置文件中。所以我要求为每个客户提供密码

become: yes
become_method: sudo

现在,当剧本运行时,似乎 Ansible 做的第一件事就是询问 sudo 密码,但我不知道哪个服务器(密码不同(。有没有办法让 Ansible 在询问密码之前打印当前主机名?

更新行动手册类似于以下内容:

---
- hosts:
all
gather_facts: no
vars:
verbose: false
log_dir: "log/dist-upgrade/{{ inventory_hostname }}"
pre_tasks:
- block:
- setup:
rescue:
- name: "Install required python-minimal package"
raw: "apt-get update && apt-get install -y --force-yes python-apt python-minimal"
- setup:
tasks:
- name: Update packages
apt:
update_cache: yes
upgrade: dist
autoremove: yes
register: output
- name: Check changes
set_fact:
updated: true
when: not output.stdout | search("0 upgraded, 0 newly installed")
- name: Display changes
debug:
msg: "{{ output.stdout_lines }}"
when: verbose or updated is defined
- block:
- name: "Create log directory"
file:
path: "{{ log_dir }}"
state: directory
changed_when: false
- name: "Write changes to logfile"
copy:
content: "{{ output.stdout }}"
dest: "{{ log_dir }}/dist-upgrade_{{ ansible_date_time.iso8601 }}.log"
changed_when: false
when: updated is defined
connection: local

(来源:http://www.panticz.de/Debian-Ubuntu-mass-dist-upgrade-with-Ansible(

您上面的 become 配置不会使 ansible 要求您输入密码:它只是建议它使用 sudo 方法(例如,如果您配置了正确的密钥,它将在没有任何密码的情况下工作(。

如果要求您输入密码,那是因为(这是一个猜测,但我相当有信心......(您在运行ansible-playbook时使用了--ask-become-pass选项。

在这种情况下,在 playbook 操作开始时仅提示一次,并且此默认成为密码将用于连接到的所有服务器,除非你在清单中为特定主机/组定义了其他服务器。

如果你根据你的机器有不同的密码,你真的没有其他选择:你需要在你的清单中声明这些密码(强烈建议使用ansible-vault加密(或使用一些其他机制将它们从外部应用程序中取出(hashicorp vault,动态库存,cyberark......

最新更新