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

Ansible任务中校验输入密码符合指定规则的正确写法

Ansible 命令行传入密码的校验实现方案

需求背景

编写Ansible任务时,需要对命令行传入的password变量做两项合规校验:

  • 密码长度大于8位
  • 密码仅包含可打印ASCII字符

原先编写的基于fail模块的校验逻辑运行异常,错误写法如下:

- fail: msg="Password validation failed" 
  when: password | default('') | length <= 0 | chars = ascii_letters

原写法错误点

  1. 过滤器链式调用逻辑错误:Jinja2中|优先级高于比较运算符,原写法会把length <=0的布尔结果传给后续过滤器,字符校验完全不生效
  2. 校验规则不符合需求:chars = ascii_letters不是Ansible合法的过滤器语法,且仅匹配大小写字母,没有覆盖数字、英文符号这类可打印ASCII字符
  3. 长度判断阈值错误:需求要求长度大于8位,原写法仅判断了密码非空,没有做长度校验

正确校验写法

使用Ansible内置的regex_search正则过滤器做字符范围匹配,可打印ASCII字符(不含空格)的编码范围是\x21-\x7E(对应ASCII码33-126,包含大小写字母、数字、半角英文符号),完整可运行的校验任务如下:

- name: 校验密码参数合规性
  fail:
    msg: "密码校验不通过:密码长度需大于8位,且仅支持输入字母、数字、半角符号类可打印ASCII字符"
  when:
    - (password | default('') | length <= 8) or (not (password | default('') | regex_search('^[\\x21-\\x7E]+$')))

规则调整说明

  • 如果需要允许密码中包含空格(空格ASCII码为32,属于可打印字符),将正则部分替换为^[\\x20-\\x7E]+$即可
  • 如果需要交互式输入密码避免明文留在命令历史,可以搭配vars_prompt实现,示例配置:
vars_prompt:
  - name: password
    prompt: "请输入用户密码"
    private: yes  # 输入时不显示明文
    confirm: yes  # 要求二次确认输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:39:34