AIX系统用户密码重置异常:任务执行成功但密码未变更且访问被拒
AIX系统中Ansible重置用户密码无效的解决方案
问题描述
使用以下Ansible任务在Linux系统重置用户密码正常,但在AIX系统执行时,任务返回changed: True,但实际用户密码未变更,登录时出现访问被拒问题。
任务代码:
- name: reset pw user: name: "{{ userid }}" update_password: always password: "{{ passwd | password_hash('sha512') }}" register: resetPwOp
执行结果:
TASK [debug] ******************************************************************* ok: [110.110.110.115] => { "msg": "resetpwop: {u'comment': u'94/C/UniqueID_cor1', u'shell': u'/usr/bin/ksh', u'group': 2, 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': 46}" }
原因分析
AIX系统的密码哈希机制与Linux存在差异:
- Linux常用的SHA512哈希格式(
$6$前缀)在AIX中默认不被识别,即使Ansible的password_hash('sha512')生成了哈希值,AIX无法解析该格式,导致密码未实际生效。 - Ansible的
user模块在AIX上处理密码时,仅验证参数格式是否合法,未校验哈希是否被系统支持,因此返回changed: True但实际密码未更新。
解决方案
方案1:使用AIX原生命令生成兼容哈希
利用AIX自带的mkpasswd命令生成符合系统要求的密码哈希,再传入user模块:
- name: Generate AIX compatible password hash command: mkpasswd -s <<< "{{ passwd }}" register: aix_pass_hash delegate_to: "{{ inventory_hostname }}" - name: Reset user password on AIX user: name: "{{ userid }}" update_password: always password: "{{ aix_pass_hash.stdout }}" register: resetPwOp
方案2:直接使用passwd命令重置(非交互方式)
通过管道传递密码给AIX的passwd命令,直接完成密码重置:
- name: Reset password via passwd command on AIX shell: echo "{{ passwd }}" | passwd -f "{{ userid }}" args: warn: false register: resetPwOp
方案3:使用chpasswd命令(若AIX支持)
如果系统安装了chpasswd工具,可批量重置密码:
- name: Reset password via chpasswd on AIX shell: echo "{{ userid }}:{{ passwd }}" | chpasswd register: resetPwOp
验证方法
密码重置后,可通过以下方式验证:
- 尝试使用新密码登录目标AIX系统。
- 查看
/etc/security/passwd文件中对应用户的password字段,确认已更新为新的哈希值。
内容的提问来源于stack exchange,提问作者itsraja
相关产品推荐
相关产品推荐

