You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible Playbook/任务级别配置ask_pass?报错求解

Ansible Playbook中设置ask_pass的正确方法

问题背景

已在ansible.cfg的[defaults]段配置ask_pass = false,多数服务器使用密钥认证。但针对未配置密钥认证的特定服务器,希望在Playbook中直接设置密码询问逻辑,而非使用--ask-pass命令行参数,配置后出现报错:

ERROR! 'ask_pass' is not a valid attribute for a Play

原因说明

ask_pass是Ansible全局配置项或连接插件参数,不属于Play级别的合法属性,因此不能直接写在Play的顶层字段中。

正确解决方案

方法1:在Inventory中针对特定主机/组设置变量

在项目的inventory文件(如hosts)中,给需要密码认证的主机或组添加ansible_ssh_ask_pass=true变量:

# 针对单个主机
[special_servers]
server1.example.com ansible_ssh_ask_pass=true

# 针对主机组批量设置
[special_servers]
server1.example.com
server2.example.com

[special_servers:vars]
ansible_ssh_ask_pass=true

方法2:在Playbook中通过变量指定

在Play的vars字段中设置ansible_ssh_ask_pass=true,可针对整个Play生效,或结合主机组仅作用于特定服务器:

---
- name: ping
  hosts: special_servers
  remote_user: student
  vars:
    ansible_ssh_ask_pass: true
  tasks:
    - name: pinging
      ping:

如果需要更精细的控制,可结合when条件判断:

---
- name: ping
  hosts: all
  remote_user: student
  vars:
    ansible_ssh_ask_pass: "{{ true if inventory_hostname in groups['special_servers'] else false }}"
  tasks:
    - name: pinging
      ping:

注意事项

  • ansible_ssh_ask_pass变量的优先级高于ansible.cfg中的ask_pass全局配置
  • 设置后,Ansible执行时会自动弹出密码输入提示,无需额外命令行参数

内容的提问来源于stack exchange,提问作者csx4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 03:15:06