Ansible执行RHEL创建本地用户Playbook报错用户不存在如何解决
Ansible创建用户报错原因与修复方案
问题根因
执行时的警告和核心报错是两个独立问题,警告和任务失败无关联:
- 核心报错原因:Playbook中
password参数行存在多余前导空格,原写法为password: "{{ passwd | password_hash('sha512') }}",冒号后到双引号之间多打了一个空格。YAML语法会将这个多余空格识别为密码值的一部分,Ansible的user模块拿到带前导空格的密码哈希后,会错误判定目标用户svc_cldscp已经存在,因此调用修改用户的usermod命令而非新建用户的useradd命令,由于用户实际未创建,自然会抛出「用户不存在于/etc/passwd」的错误,返回码6。 - 开头的组名无效字符警告:是Inventory主机清单里的组名包含了Ansible不推荐的特殊字符(比如空格、中文、非ASCII字符等),该警告仅为兼容性提示,不会导致本次任务失败。
修复步骤
- 修正Playbook中password行的多余空格,将该行改为标准YAML写法:
注意YAML键值对的冒号后只保留1个空格,值的开头不要留无意义的空白字符。password: "{{ passwd | password_hash('sha512') }}" - (可选)如果需要消除组名警告,检查你的Inventory文件,将所有组名修改为仅包含字母、数字、下划线、短横杠的格式,不要带空格、中文或其他特殊符号。
修复后完整Playbook参考
--- - name: Creating Local User Account on RHEL Systems. hosts: hapansible05 become: true vars: passwd: WSXcde1234 tasks: - name: Creating Local User user: name: svc_cldscp password: "{{ passwd | password_hash('sha512') }}" comment: svc_cldscp-ServiceAcct shell: /bin/bash
修正后重新执行Playbook即可正常创建用户。
内容的提问来源于stack exchange,提问作者user19310105
相关产品推荐
相关产品推荐

