八、Ansible系统类模块(三)
user模块
user:管理远程主机上的用户,如创建用户、修改用户、删除用户、为用户创建密钥对等操作
案例
1、在db_server主机上创建名为tz的用户,如果用户已经存在,则不进行任何操作。
$ ansible db_server -m user -a 'name=tz'
2、在db_server主机上删除名为tz的用户,但是不会删除tz用户的家目录
$ ansible db_server -m user -a 'name=tz state=absent'
3、在db_server主机上删除名为tz的用户,同时会删除tz用户的家目录等信息
$ ansible db_server -m user -a 'name=tz state=absent remove=yes'
4、指定db_server主机上的tz用户的主组为tzthink,tzthink组需要提前存在,当不使用group设置主组时,默认主组与用户名相同。
$ ansible db_server -m user -a "name=tz group=tzthink"
5、指定db_server主机上的tz用户的附加组为tzthink,tzthink组需要提前存在。
注意,如果不知道该用户是否有附加组,最好将append参数设置为yes,表示将tzthink追加到tz用户的附加组中,如果不加则会使用tzthink组覆盖用户的所有附加组。
我们也可以一次性设置多个附加组,附加组之间用逗号隔开,比如groups=tz,tzthink,root 示例命令如下
$ ansible db_server -m user -a "name=tz groups=tzthink append=yes"
6、指定db_server主机上的tz用户使用/bin/csh作为默认shell
$ ansible db_server -m user -a "name=tz shell=/bin/csh"
7、指定db_server主机上的tz用户的uid为2002
$ ansible db_server -m user -a "name=tz uid=2002"
8、指定db_server主机上的tz用户的过期时间为2020年06月08日,使用date -d 2020-6-8 +%s命令可以获取到对应日期的unix时间戳,这个时间戳是从1970年1月1日开始算的
$ ansible db_server -m user -a 'name=tz expires=1591545600'
9、指定db_server主机上的tz用户的注释信息
$ ansible db_server -m user -a 'name=tz comment="www.tz.com"'
10、将db_server主机上的tz用户的密码设置为123456
这里说一下password参数,这个参数给定的值是一串加密的字符串,如/etc/shadow文件中的密码字符串。
这里有两种加密方式,第一种如下

第二种方式如下

这里的案例使用第一种方式,两种方式实测可用。
$ pass=$(echo "123456" | openssl passwd -1 -stdin)
$ ansible db_server -m user -a "name=tz password=${pass}"
11、如下命令表示设置db_server主机上的tz用户的密码,但是如果用户当前的加密字符串与命令中设置的加密字符串不一致,则不进行密码更新的操作。
$ ansible db_server -m user -a 'name=tz password="$6$a.ofrhIWn4gJGbi0$i6Xhr.F/YyhMe2UCodydwyF952bP4DOf0qYcGE8aK.EsgOR/GKU0Oy9Ov6oIH3RIJ9BnhvoVR9ozflmUJgxhL0" update_password=on_create'
12、为db_server上的tz用户生成ssh密钥对,默认在用户家目录的./ssh目录中生成名为id_rsa的私钥和名为id_rsa.pub的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作。
$ ansible db_server -m user -a 'name=tz generate_ssh_key=yes'
13、为db_server上的tz用户生成ssh密钥对,密钥对生成在/opt目录下,私钥名为id_rsa_tz,公钥名为id_rsa_tz.pub
$ ansible db_server -m user -a 'name=tz generate_ssh_key=yes ssh_key_file=/opt/id_rsa_tz'
14、为db_server上的tz用户生成ssh密钥对,同时指定公钥中的注释信息为”www.tzthink.net”,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
$ ansible db_server -m user -a 'name=tz generate_ssh_key=yes ssh_key_comment="www.tzthink.net"'
15、为db_server上的tz用户生成ssh密钥对,同时指定私钥的密码为123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的旧密钥
$ ansible db_server -m user -a 'name=tz generate_ssh_key=yes ssh_key_passphrase="123456"'
16、为db_server上的tz用户生成ssh密钥对,同时指定密钥对的类型为dsa,当不显式指定密钥类型时,默认类型为rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的旧密钥
$ ansible db_server -m user -a 'name=tz generate_ssh_key=yes ssh_key_type=dsa'
常用参数
-
name
必须参数,用于指定要操作的用户名称,可以使用别名user。 -
group
此参数用于指定用户所在的基本组,也就是默认组 -
gourps
此参数用于指定用户所在的附加组。
注意,如果用户已经拥有附加组时,需要配合append参数使用,当append=yes时,才会继续追加新的附加组。默认为append=no,即再次使用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文件,对应用户的第八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在Linux和FreeBSD系统中使用。 -
comment
此参数用于指定用户的注释信息 -
state
此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设置为absent时表示删除用户。 -
remove
当state的值设置为absent时,表示要删除远程主机中的用户,但是在删除用户时,不会删除用户的家目录等信息,这是因为remoove参数的默认值为no,如果设置为yes,在删除用户的同时,会删除用户的家目录,当state=absent并且remove=yes时,相当于执行”userdel –remove”命令 -
password
此参数用于指定用户的密码,但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于/etc/shadow文件中的密码字段,是一个对明文密码进行哈希后的字符串,详见案例。 -
update_password
此参数可选择的值为always和on_create。
当值为always时,如果password参数设置的密码与用户当前密码不一致,则更新用户密码,默认值即为always;
当值为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,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作
group模块
group:管理远程主机上的组。
案例
1、确保db_servers主机中存在名为tz的组
$ ansible db_servers -m group -a ' name=tz'
2、删除db_servers主机中存在名为tz的组,删除成功的前提是不能有用户把被删除的组当成主组。
$ ansible db_servers -m group -a ' name=tz state=absent'
3、确保db_servers主机中存在名为tz的组,并且确定tz组的组id为1008
$ ansible db_servers -m group -a 'name=tz gid=1010'
常用参数
-
name
必须参数,用于指定要操作的组名称。 -
state
用于指定组的状态,两个值可选,present,absent,默认为present,设置为absent表示删除组。 -
gid
用于指定组的gid
参考资料:
转载于朱老师博客
部分参考千峰教育ansible

浙公网安备 33010602011771号