使用Ansible生成无相邻重复字符的指定规则随机密码
解决Ansible生成无相邻重复字符的随机密码问题
原代码使用password lookup模块生成的密码无法避免相邻重复字符,我们可以通过循环生成+正则校验的方式解决这个问题:每次生成密码后检查是否存在相邻重复字符,若不符合则重新生成,直到得到符合要求的结果。
以下是修改后的完整代码:
--- - set_fact: password_length: "{{ 20 + (5 | random) }}" - debug: var: password_length - name: 生成符合要求的无相邻重复随机密码 set_fact: random_password: "{{ lookup('password', '/dev/null length={{ password_length }} chars=ascii_lowercase,ascii_uppercase,digits,_-!.,;:') }}" until: random_password is match("^(?!.*(.)\\1).+$") retries: 10 delay: 1 - name: 输出生成的密码 debug: msg: "{{ random_password }}"
关键说明:
- 正则校验规则:
^(?!.*(.)\1).+$是负向前瞻正则,用于匹配没有任何相邻重复字符的字符串。其中(.)\1表示匹配任意字符后跟相同字符,(?!...)表示排除这种情况。 - 循环逻辑:通过
until条件判断密码是否符合要求,retries设置最大重试次数(10次足够覆盖绝大多数情况),delay设置每次重试的间隔时间。 - 保留原有需求:依然保留了原代码中20-25位长度、指定字符集的要求,仅添加了相邻重复校验逻辑。
内容的提问来源于stack exchange,提问作者Ziad
相关产品推荐
相关产品推荐

