[TOC]
> user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
## 1、选项
### name参数:
> 必须参数,用于指定要操作的用户名称,可以使用别名 user。
### group参数:
> 此参数用于指定用户所在的基本组。
### gourps参数:
> 此参数用于指定用户所在的附加组。注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合 append 参数使用,否则在默认情况下,当再次使用 groups 参数设置附加组时,用户原来的附加组会被覆盖。
### append参数:
> 如果用户原本就存在多个附加组,那么当使用 groups 参数设置附加组时,当前设置**会覆盖原来的附加组设置**,如果不想覆盖原来的附加组设置,需要结合 append 参数,将 append 设置为 yes,表示追加附加组到现有的附加组设置,append 默认值为 no。
### shell参数:
> 此参数用于指定用户的默认 shell。
### uid参数:
> 此参数用于指定用户的 uid 号。
### expires参数:
> 此参数用于指定用户的过期时间,相当于设置 /etc/shadow 文件中的的第8列。
> 比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的 unix 时间戳,使用命令 “date -d 2018-12-31 +%s” 获取到的时间戳为1546185600,所以,当设置 expires=1546185600 时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的 /etc/shadow 文件,对应用户的第8八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用。
### comment参数:
> 此参数用于指定用户的注释信息。
### state参数:、
> 此参数用于指定用户是否存在于远程主机中
可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
### remove参数:
> 当 state 的值设置为 absent 时,表示要删除远程主机中的用户。
> **但是在删除用户时,不会删除用户的家目录等信息**,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel --remove” 命令。
### password参数:
> 此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输**入如下命令,生成明文密码对应的加密字符串。**
> import crypt; crypt.crypt('666666')
> 输入上述命令后,即可得到明文密码666666对应的加密字符串。
### update_password参数:
> 此参数有两个值可选,always 和 on_create,当此参数的值设置为always 时表示,如果 password 参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为 always,但是当此参数设置为 on_create 时,如果 password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定。如果是新创建的用户,即使此参数设置为 on_create,也会将用户的密码设置为 password 参数对应的值。
### generate_ssh_key参数:
> 此参数默认值为 no,如果设置为 yes,表示为对应的用户生成 ssh 密钥对,默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作)。
### ssh_key_file参数:
当 generate_ssh_key 参数的值为 yes 时,使用此参数自定义生成 ssh 私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以”.pub”结尾。
### ssh_key_comment参数:
> 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置公钥中的注释信息。但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作。当不指定此参数时,默认的注释信息为”ansible-generated on 远程主机的主机名”。
### ssh_key_passphrase参数:
> 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置私钥的密码。但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作。
### ssh_key_type参数:
> 当 generate_ssh_key 参数的值为 yes 时,在创建证书时,使用此参数设置密钥对的类型。默认密钥类型为 rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作。
## 3、实例
1. 在 ansible-demo3 主机上创建名为 ding 的用户,如果用户已经存在,则不进行任何操作。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": false,
"comment": "",
"group": 1000,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
2. 在 ansible-demo3 主机上删除名为 ding 的用户,但是不会删除 ding 用户的家目录。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding state=absent'
ansible-demo3 | SUCCESS => {
"changed": true,
"force": false,
"name": "ding",
"remove": false,
"state": "absent"
}
```
3. 在 ansible-demo3 主机上删除名为 ding 的用户,同时会删除 ding 用户的家目录等信息。如果已经不存在 ding 的用户,则不做任何操作。
state=absent 删除用户
remove=yes 删除家目录
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding state=absent remove=yes'
ansible-demo3 | SUCCESS => {
"changed": false,
"name": "ding",
"state": "absent"
}
```
4. 指定 ansible-demo3 主机上的 ding 用户的主组为 testgroup,testgroup 组需要提前存在,当不使用 group 设置主组时,默认主组与用户名相同。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a "name=ding group=testgroup"
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"group": 1001,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
5.指定 ansible-demo3 主机上的 ding 用户的附加组为 testgroup2,testgroup2 组需要提前存在,当不使用 groups 设置附属组时,默认附加组与用户名相同。注意,为了保险起见,在不知道用户原来的附加组设定的情况下,**最好将 append 参数设置为 yes,我们也可以一次性设置多个附加组,附加组之间用逗号隔开,比如groups=ding,testgroup,root 。**
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a "name=ding groups=testgroup2 append=yes"
ansible-demo3 | SUCCESS => {
"append": true,
"changed": true,
"comment": "",
"group": 1001,
"groups": "testgroup2",
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
6. 指定 ansible-demo3 主机上的 ding 用户的过期时间为2018年12月31日。使用”date -d 2018-12-31 +%s“命令可以获取到对应日期的 unix 时间戳。
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding expires=1546185600'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
7. 指定 ansible-demo3 主机上的 ding 用户的注释信息。
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding comment="www.ding.com" '
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
8. 将 ansible-demo3 主机上的 ding 用户的密码设置为666666。
1)首先生成666666的加密字符串:
```
[root@ansible-manager ~]# python
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt;crypt.crypt('666666')
'$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0'
```
2)使用生成的密码字符串设置用户密码:
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a ' name=ding password="$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0" '
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"uid": 1000
}
```
9. 为 ansible-demo3 上的 ding 用户生成 ssh 密钥对。默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作。
```
[root@ansible-manager ~]# ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes'
ansible-demo3 | SUCCESS => {
"append": false,
"changed": true,
"comment": "www.ding.com",
"group": 1008,
"home": "/home/ding",
"move_home": false,
"name": "ding",
"shell": "/bin/bash",
"ssh_fingerprint": "2048 SHA256:frvx+OG3cZvXmICd5VYgOoSpkWEuDpQDwgsxzEzjgAM ansible-generated on ansible-demo3 (RSA)",
"ssh_key_file": "/home/ding/.ssh/id_rsa",
"ssh_public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8KGJh5sRo45HFvEPy7QwRTT5k+Rnc8eZWwM1iBCYbvcB6LYevB1yUojxE3ycaOnIy7oCokaPIEEsfGYo/y+Eci2TlXea/WrQs3uz8LRxowFg6ZvKODAdSLX0H6DxLP3nnFoxh2Kd5sfglJmCpefIUxNdLBTEeUBfgPfmuLVIQ/+Q7/7Fnpb8XyRsK3MtP+YAm2cLuGbyXoLjncmRcvIDjyYuFYUUoCMsvs7It7LGE+uux7teacCjHJss6O0/7QcDeCYiOUhMq7YE5OcxdMatVgDPQpGjFfPnMu4UZur3YIYlIT7Zb4u7RJWkPQmARtBqIr0dOks9TcL9U5U3XTJ8P ansible-generated on ansible-demo3",
"state": "present",
"uid": 1000
}
```
10. 为 ansible-demo3 上的 ding 用户生成 ssh 密钥对,密钥对生成在 /opt 目录下,私钥名为 id_rsa_ding,公钥名为 id_rsa_ding.pub。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_file=/opt/id_rsa_ding'
```
11. 为 ansible-demo3 上的 ding 用户生成 ssh 密钥对,同时指定公钥中的注释信息为 “www.ding.com”,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_comment="www.ding.com"'
```
12 .为 ansible-demo3 上的 ding 用户生成 ssh 密钥对,同时指定私钥的密码为123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_passphrase="123456"'
```
13. 为 ansible-demo3 上的 ding 用户生成 ssh 密钥对,同时指定密钥对的类型为 dsa,当不显式指定密钥类型时,默认类型为 rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。
```
ansible ansible-demo3 -m user -a 'name=ding generate_ssh_key=yes ssh_key_type=dsa'
```
- Linux
- 高级
- 杀毒
- 记一次中毒事件
- clamav查毒软件
- 处理挖矿病毒
- 定时任务
- kill
- chattr文件保护
- 运行级别
- Linux启动
- 文件加密
- ssh免密登录
- .ssh
- 问题
- 脚本
- 阿里云域名解析
- yum源
- 时间同步
- keepalived实现高可用
- dos字符与unix字符
- 大文件上传
- 基础
- proc目录
- 设置宋体
- 基础命令_01
- 基础命令_02
- SELinux
- 文件描述符
- 基础命令_03
- awk
- 系统日志
- date命令
- bc命令
- lsof
- vim快捷键
- shell
- 循环控制
- expr
- 执行脚本的方式
- declare
- shell脚本
- 控制启停脚本
- 数值计算
- centos
- 配置网络
- 环境
- 灰度环境
- ansible
- 模块
- 语法
- file模块
- setup模块
- ping模块
- copy模块
- command模块
- shell模块
- service模块
- cron模块
- yum模块
- user 模块
- group模块
- 指定用户
- playbook
- 实例
- ansible安装
- Jenkins
- shell部署
- 导入已有项目的配置
- 执行shell
- tungsten数据同步
- 防火墙
- netfilter