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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:53:36