侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 742 篇文章
  • 累计创建 64 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible的user模块

zze
zze
2020-03-28 / 0 评论 / 0 点赞 / 793 阅读 / 7195 字

不定期更新相关视频,抖音点击左上角加号后扫一扫右方侧边栏二维码关注我~正在更新《Shell其实很简单》系列

此文章为「ansible笔记(2)之常用模块」的子文章。

user 模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。

参数说明:

  • 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 文件,对应用户的第八列的值将变成 17895(表示 1970 年 1 月 1 日到2018 年 12 月 31 日的天数,unix 时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在 Linux 和 FreeBSD 系统中使用;
  • comment:此参数用于指定用户的注释信息;
  • state:此参数用于指定用户是否存在于远程主机中,可选值有 presentabsent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户;
  • remove:当 state 的值设置为 absent 时,表示要删除远程主机中的用户,但是在删除用户时,不会删除用户的家目录等信息,这是因为 remoove 参数的默认值为 no,如果设置为 yes,在删除用户的同时,会删除用户的家目录,当 state=absent 并且 remove=yes 时,相当于执行 userdel --remove 命令;
  • password:此参数用于指定用户的密码,但是这个密码不能是明文的密码,而是一个对明文密码加密后的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串:import crypt; crypt.crypt('666666'),输入上述命令后,即可得到明文密码 666666 对应的加密字符串;
  • update_password:此参数有两个值可选,alwayson_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,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作;

例 1:在客户机上创建名为 zze 的用户,如果用户已经存在,则不进行任何操作。

$ ansible all -m user -a 'name=zze'

例 2:在客户机上删除名为 zze 的用户,但是不会删除 zze 用户的家目录。

$ ansible all -m user -a 'name=zze state=absent'

例 3:在客户机上删除名为 zze 的用户,同时会删除 zze 用户的家目录等信息。

$ ansible all -m user -a 'name=abc state=absent remove=yes'

例 4:指定客户机上的 zze 用户的主组为 zze.xyzzze.xyz 组需要提前存在,当不使用 group 设置主组时,默认主组与用户名相同。

$ ansible all -m user -a "name=zze group=zze.xyz"

例 5:指定客户机上的 zze 用户的附加组为 zze.xyzzze.xyz 组需要提前存在,当不使用 groups 设置附属组时,默认附加组与用户名相同,注意,为了保险起见,在不知道用户原来的附加组设定的情况下,最好将 append 参数设置为 yes,我们也可以一次性设置多个附加组,附加组之间用逗号隔开,比如 groups=zze,zze.xyz

$ ansible all -m user -a "name=zze groups=zze.xyz append=yes"

例 6:指定客户机上的 zze 用户使用 /bin/csh 作为默认 shell。

$ ansible all -m user -a "name=zze shell=/bin/csh"

例 7:指定客户机上的 zze 用户的 uid 为 2002

$ ansible all -m user -a "name=zze uid=2002"

例 8:指定客户机上的 zze 用户的过期时间为 2021 年 12 月 31 日,使用 date -d 2021-12-31 +%s 命令可以获取到对应日期的 unix 时间戳。

$ ansible all -m user -a 'name=zze expires=1640880000'

例 9:指定客户机上的 zze 用户的注释信息。

$ ansible all -m user -a 'name=zze comment="www.zze.xyz"'

例 10:将客户机上的 zze 用户的密码设置为 666666

$ tmp_pwd=$(python3 -c 'import crypt; print(crypt.crypt("666666"))') && ansible all -m user -a "name=zze password='$tmp_pwd' "

例 11:如下命令表示设置客户机上的 zze 用户的密码,但是如果用户当前的加密字符串与命令中设置的加密字符串不一致,则不进行密码更新的操作。

$ tmp_pwd=$(python3 -c 'import crypt; print(crypt.crypt("888888"))') && ansible all -m user -a 'name=zze password='$tmp_pwd' update_password=on_create'

例 12:为客户机上的 zze 用户生成 ssh 密钥对,默认在用户家目录的 ./ssh 目录中生成名为 id_rsa 的私钥和名为 id_rsa.pub 的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作。

$ ansible all -m user -a 'name=zze generate_ssh_key=yes'

例 13:为客户机上的 zze 用户生成 ssh 密钥对,密钥对生成在 /opt 目录下,私钥名为 id_rsa_zsy,公钥名为id_rsa_zsy.pub

$ ansible all -m user -a 'name=zze generate_ssh_key=yes ssh_key_file=/opt/id_rsa_zsy'

例 14:为客户机上的 zze 用户生成 ssh 密钥对,同时指定公钥中的注释信息为 www.zze.xyz,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。

$ ansible all -m user -a 'name=zze generate_ssh_key=yes ssh_key_comment="www.zze.xyz"'

例 15:为客户机上的 zze 用户生成 ssh 密钥对,同时指定私钥的密码为 123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。

$ ansible all -m user -a 'name=zze generate_ssh_key=yes ssh_key_passphrase="123456"'

例 16:为客户机上的 zze 用户生成 ssh 密钥对,同时指定密钥对的类型为 dsa,当不显式指定密钥类型时,默认类型为 rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥。

$ ansible all -m user -a 'name=zze generate_ssh_key=yes ssh_key_type=dsa'
0

评论区