检查密码是否符合条件



我在Ansible任务中获得用户输入密码。这个用户输入通过命令传递给"密码变量"。我想检查给定的密码是否符合以下条件:

  • 长度大于8
  • 密码应该只包含可打印的ASCII字符

我试过这样做:

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

这个不能用

如果我使用失败模块仅用于密码非空和长度检查,它正在工作。

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

要检查字符串是否只包含ASCII字符,最好是使用正则表达式,您可以使用regex测试assert

由于regex非常强大,您还可以在其中添加字符限制。

下面是一个任务:

- name: Assert a string of 8+ ASCII char
assert:
that:
- password is string
- password is regex('^[x00-x7F]{8,}$')

和一些基于用例的结果:

  • 错误,如果我们不发送任何--extra-vars
    fatal: [localhost]: FAILED! => changed=false 
    assertion: password is string
    evaluated_to: false
    msg: Assertion failed
    
  • 错误,如果我们传递一个太短的密码:--extra-vars "password=1234567"
    fatal: [localhost]: FAILED! => changed=false 
    assertion: password is regex('^[x00-x7F]{8,}$')
    evaluated_to: false
    msg: Assertion failed
    
  • 如果我们传递一个非ascii字符:--extra-vars "password=1234567é"
  • 也会在正则表达式中出错
    fatal: [localhost]: FAILED! => changed=false 
    assertion: password is regex('^[x00-x7F]{8,}$')
    evaluated_to: false
    msg: Assertion failed
    
  • 通过--extra-vars "password=12345678"传递断言
    ok: [localhost] => changed=false 
    msg: All assertions passed
    

最新更新