一、概述
user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
二、心得
password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。

问题示例:

首先将密码加密后复制这段加密后的字符串

然后执行命令进行创建用户

ansible 192.168.81.131 -m user -a "name=ansible password='$6$CgQ16RU8ITySpkh7$MzOzbrDT1.j2b.4rUnhgpG.Zqb3w9Ip.7eEKGU2HE6CiUiDAaQeTNvBK6JLw.rMCNomD0chcE4yVK9ChTkJN/0' state=present"

命令执行完毕,返回创建成功,于是用ssh命令去登录,输入密码后发现认证失败!!!

于是在目标主机上查看/etc/shadow文件,发现密码部分不完整:

 

 于是百思得其解,很有可能是密码的加密字符串中含有特殊字符导致的,于是将字符串中的“$”字符前加一个“\”转义符

ansible 192.168.81.131 -m user -a "name=ansible password='\$6\$CgQ16RU8ITySpkh7\$MzOzbrDT1.j2b.4rUnhgpG.Zqb3w9Ip.7eEKGU2HE6CiUiDAaQeTNvBK6JLw.rMCNomD0chcE4yVK9ChTkJN/0' update_password=always"

然后再cat一下/etc/shadow

 

 完美!

update_password参数:此参数有两个值可选,always 和 on_create,当此参数的值设置为always 时表示,如果 password 参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为 always,但是当此参数设置为 on_create 时,如果 password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定。如果是新创建的用户,即使此参数设置为 on_create,也会将用户的密码设置为 password 参数对应的值。

三、使用raw模块进行批量修改用户密码

raw模块 [类似于command模块、支持管道传递],如果密码中包含特殊字符,则无法使用raw模块

ansible shenzhen -m raw -a "echo 'newpass' | passwd --stdin username"

 

posted on 2019-11-22 15:00  自然洒脱  阅读(1034)  评论(0编辑  收藏  举报