ansible笔记(8):常用模块之系统类模块(二)
参考:http://www.zsythink.net/archives/2580
user模块
user模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
此处我们介绍一些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参数:此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为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参数:此参数有两个值可选,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密钥还不是特别了解,可以参考如下文章
http://www.zsythink.net/archives/2375
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,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作
user模块的ad-hoc示例命令如下:
在test70主机上创建名为lym的用户,如果用户已经存在,则不进行任何操作。
1 | ansible test70 -m user -a 'name=lym' |
在test70主机上删除名为lym的用户,同时会删除lym用户的家目录等信息
1 2 3 4 5 6 7 8 9 10 11 | [root@node1 ~]# ansible test70 -m user -a 'name=lym state=absent remove=yes' test70 | CHANGED => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "changed" : true , "force" : false , "name" : "lym" , "remove" : true , "state" : "absent" } |
指定test70主机上的lym用户的主组为think,think组需要提前存在,当不使用group设置主组时,默认主组与用户名相同。
1 | ansible test70 -m user -a "name=lym group=think" |
指定test70主机上的zsy用户的附加组为zsythink,zsythink组需要提前存在,当不使用groups设置附属组时,默认附加组与用户名相同,注意,为了保险起见,在不知道用户原来的附加组设定的情况下,最好将append参数设置为yes,我们也可以一次性设置多个附加组,附加组之间用逗号隔开,比如groups=zsy,zsythink,root 示例命令如下
1 | ansible test70 -m user -a "name=lym groups=think append=yes" |
指定test70主机上的lym用户使用/bin/csh作为默认shell
1 | ansible test70 -m user -a "name=lym shell=/bin/sch" |
去对应主机查看文件/etp/passwd
指定test70主机上的lym用户的uid为2002
1 | ansible test70 -m user -a "name=lym uid=2002" |
指定test70主机上的lym用户的过期时间为2020年09月29日,使用"date -d 2020-09-29 +%s"命令可以获取到对应日期的unix时间戳
1 | ansible test70 -m user -a 'name=lym expires=1601343660' |
PS:如果需要获取到日期加时间的时间戳使用以下命令
1 | date -d "2020-09-29 09:41:00" +%s |
指定test70主机上的lym用户的注释信息
1 | ansible test70 -m user -a 'name=lym comment="Liuym"' |
将test70主机上的lym用户的密码设置为666666
首先生成666666的加密字符串
1 2 3 4 5 6 7 | [root@node1 ~]# python Python 2.7.5 ( default , Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2 Type "help" , "copyright" , "credits" or "license" for more information. >>> import crypt;crypt.crypt( '666666' ) '$6$34yJV1B9w6nm28CF$YZUr59riETAfSIs3vIbXZCstuRtfJyELt8IuL7j8PgYkrlzLuRMZ2s7UGV1iGaCTuSEhWXtuny3FLZ1gccbD41' >>> |
使用生成的密码字符串设置用户密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # ansible test70 -m user -a 'name=lym password="$6$34yJV1B9w6nm28CF$YZUr59riETAfSIs3vIbXZCstuRtfJyELt8IuL7j8PgYkrlzLuRMZ2s7UGV1iGaCTuSEhWXtuny3FLZ1gccbD41"' test70 | CHANGED => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "append" : false , "changed" : true , "comment" : "Liuym" , "group" : 1003, "home" : "/home/lym" , "move_home" : false , "name" : "lym" , "password" : "NOT_LOGGING_PASSWORD" , "shell" : "/bin/bash" , "state" : "present" , "uid" : 2002 } |
如下命令表示设置test70主机上的zsy用户的密码,但是如果用户当前的加密字符串与命令中设置的加密字符串不一致,则不进行密码更新的操作。
1 | ansible test70 -m user -a 'name=lym password="$6$34yJV1B9w6nm28CF$YZUr59riETAfSIs3vIbXZCstuRtfJyELt8IuL7j8PgYkrlzLuRMZ2s7UGV1iGaCTuSEhWXtuny3FLZ1gccbD41s" update_password=on_create' |
为test70上的lym用户生成ssh密钥对,默认在用户家目录的./ssh目录中生成名为id_rsa的私钥和名为id_rsa.pub的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node1 ~]# ansible test70 -m user -a 'name=lym generate_ssh_key=yes' test70 | CHANGED => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "append" : false , "changed" : true , "comment" : "" , "group" : 1003, "home" : "/home/lym" , "move_home" : false , "name" : "lym" , "shell" : "/bin/bash" , "ssh_fingerprint" : "2048 SHA256:DCZLoxJP8dCpo1Y6bz1k6MXma3eUpDVig0QCMnfXoas ansible-generated on 70 (RSA)" , "ssh_key_file" : "/home/lym/.ssh/id_rsa" , "ssh_public_key" : "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCM118cVRVuKytq0+SPDxNUjj71JQmB+yECO6eI8KotwTYzBKRz9wbFwPdYjiCZTIo61TcIPrja8Ezrtygsz5r4w3Dn8Ulxakl3dPW70udLfGt7fCunzCJtPrZ2RbIG1ViPehI62XLw7iCl0/KPewUrVvfJnO2vvOGFCitpjx2bRW3V6CMBK/oKG2rBCjeqlvIHoOGrWlS0MDlTx7ihLlZXnprKG6ePo6j4gyk36X0/obB1O4oEeBH1RjUdMwCCPPK2CtuHNt5KrRsO6JzkLPYkVuhA0i/NSJlu2qRWMgonFxKo1DI2oPTGL7qLlHh5718Oz4WeADD57lbvgwB3ZYZ ansible-generated on 70" , "state" : "present" , "uid" : 1003 } |
为test70上的zsy用户生成ssh密钥对,密钥对生成在/opt目录下,私钥名为id_rsa_zsy,公钥名为id_rsa_zsy.pub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@node1 ~]# ansible test70 -m user -a 'name=zsy generate_ssh_key=yes ssh_key_file=/opt/id_rsa_zsy' test70 | CHANGED => { "ansible_facts" : { "discovered_interpreter_python" : "/usr/bin/python" }, "append" : false , "changed" : true , "comment" : "" , "group" : 1004, "home" : "/home/zsy" , "move_home" : false , "name" : "zsy" , "shell" : "/bin/bash" , "ssh_fingerprint" : "2048 SHA256:bFnnP5WfgODh14evbrZ/sUECqvfiml0KpTlCkRUMZSk ansible-generated on 70 (RSA)" , "ssh_key_file" : "/opt/id_rsa_zsy" , "ssh_public_key" : "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEEsNvjU4y90M6uwwh6OToj+mdFoD2YqUTRADX153T4fJ9t7GR0qNaJthTFkEiZ6Dl6cUeyF9h9RvagItxD1A6SA9MOfRY3rMttlcBlUzwDsbFVnWHN9K3w230CWs8xzobJXgf1YxpQn9VnJTXEXE+UxCL8sg24RZB9TDUDeUKdr3nSP/3JlWq3gqH8Ipo48Jh1+44HBQw7Hgup3213TD72+ctmADKvDJOjNm8OFX5CATmJWIIfiHrD424ZtZgAlBp3UAeH7K7kN+/d36jvzCO3KL2VZgdE1vDL44okESU10FwDaqiAs8Wl3awjPWSBabFG76o/uBAV0j1ZQI8KbP5 ansible-generated on 70" , "state" : "present" , "uid" : 1004 } |
为test70上的zsy用户生成ssh密钥对,同时指定公钥中的注释信息为"www.zsythink.net",此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥
1 | ansible test70 -m user -a 'name=zsy generate_ssh_key=yes ssh_key_comment="www.zsythink.net"' |
如果重新输入一次命令但是注释不一样则不会生效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2019-09-29 ELK之Kibana的可视化监控报警插件sentinl的配置