Ansible user模块update_password注册变量无rc属性,如何确认密码更新成功?
问题:Ansible重置Linux用户密码后如何确认操作成功?
我用以下Ansible任务重置Linux用户密码,任务执行显示成功,但注册变量resetPwOp没有rc属性,导致检查resetPwOp.rc == 0时报错'dict object' has no attribute 'rc'。
任务代码:
- name: reset pw linux user: name: "{{ userid }}" update_password: always password: "{{ passwd | password_hash('sha512') }}" register: resetPwOp when: (unlockUserOp is defined) and (unlockUserOp.rc == 0)
任务执行输出:
TASK [reset pw linux] ********************************************************** changed: [72.118.19.24]
注册变量resetPwOp的具体值:
"msg": "resetpwop linux: {u'comment': u'72923', u'shell': u'/bin/bash', u'group': 10115, u'name': u'user1', u'changed': True, 'failed': False, u'state': u'present', u'home': u'/home/user1', u'move_home': False, u'password': u'NOT_LOGGING_PASSWORD', u'append': False, u'uid': 1150}
请问如何确认密码已成功更新?
解决方法
- 检查
changed状态:Ansible的user模块成功修改密码时,会将changed字段设为True。通过判断resetPwOp.changed == True,就能确认密码已被更新。 - 检查
failed状态:变量中的failed: False说明任务执行无异常,结合changed: True可直接确认操作成功。 - 直接验证密码有效性:添加后续任务,用
shell模块通过su测试登录,示例代码:
- name: verify password shell: echo "{{ passwd }}" | su - "{{ userid }}" -c "echo 'Login success'" register: verifyResult ignore_errors: true - name: confirm password reset success debug: msg: "密码重置成功" when: verifyResult.rc == 0
注意:此方法需目标主机允许su操作,且涉及明文密码传递,生产环境需谨慎使用。
- 对比密码哈希值:读取
/etc/shadow中用户的哈希值,与生成的哈希值对比,示例任务:
- name: get current password hash from /etc/shadow shell: grep "{{ userid }}" /etc/shadow | cut -d: -f2 register: currentHash - name: compare password hashes debug: msg: "密码重置成功" when: currentHash.stdout == "{{ passwd | password_hash('sha512') }}"
该方法无需明文密码,安全性更高。
内容的提问来源于stack exchange,提问作者itsraja
相关产品推荐
相关产品推荐

