Loading... <blockquote>在本博客中,ansible是一个系列文章,我们会尽量以通俗易懂的方式总结ansible的相关知识点。 ansible系列博文直达链接:<a href="https://www.zsythink.net/archives/tag/ansible/" target="_blank" rel="noopener">ansible轻松入门系列</a> “ansible系列”中的每篇文章都建立在前文的基础之上,所以,请按照顺序阅读这些文章,否则有可能在阅读中遇到障碍。</blockquote> 这篇文章会继续介绍一些常用的系统类操作模块,可与前文结合在一起阅读。 <h2>user模块</h2> user模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。 此处我们介绍一些user模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。 <strong>name参数</strong>:必须参数,用于指定要操作的用户名称,可以使用别名user。 <strong>group参数</strong>:此参数用于指定用户所在的基本组 <strong>gourps参数</strong>:此参数用于指定用户所在的附加组,注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖。 <strong>append参数</strong>:如果用户原本就存在多个附加组,那么当使用groups参数设置附加组时,当前设置会覆盖原来的附加组设置,如果不想覆盖原来的附加组设置,需要结合append参数,将append设置为yes,表示追加附加组到现有的附加组设置,append默认值为no。 <strong>shell参数</strong>:此参数用于指定用户的默认shell <strong>uid参数</strong>:此参数用于指定用户的uid号 <strong>expires参数</strong>:此参数用于指定用户的过期时间,相当于设置/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系统中使用。 <strong>comment参数</strong>:此参数用于指定用户的注释信息 <strong>state参数</strong>:此参数用于指定用户是否存在于远程主机中,可选值有present、absent,默认值为present,表示用户需要存在,当设置为absent时表示删除用户。 <strong>remove参数</strong>:当state的值设置为absent时,表示要删除远程主机中的用户,但是在删除用户时,不会删除用户的家目录等信息,这是因为remoove参数的默认值为no,如果设置为yes,在删除用户的同时,会删除用户的家目录,当state=absent并且remove=yes时,相当于执行”userdel –remove”命令 <strong>password参数</strong>:此参数用于指定用户的密码,但是这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于/etc/shadow文件中的密码字段,是一个对明文密码进行哈希后的字符串,你可以在python的命令提示符下输入如下命令,生成明文密码对应的加密字符串。 import crypt; crypt.crypt(‘666666’) 输入上述命令后,即可得到明文密码666666对应的加密字符串。 <strong>update_password参数</strong>:此参数有两个值可选,always和on_create,当此参数的值设置为always时表示,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always,但是当此参数设置为on_create时,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定,如果是新创建的用户,即使此参数设置为on_create,也会将用户的密码设置为password参数对应的值。 <strong>generate_ssh_key参数</strong>:此参数默认值为no,如果设置为yes,表示为对应的用户生成ssh密钥对,默认在用户家目录的./ssh目录中生成名为id_rsa的私钥和名为id_rsa.pub的公钥,如果同名的密钥已经存在与对应的目录中,原同名密钥并不会被覆盖(不做任何操作),如果你对ssh密钥还不是特别了解,可以参考如下文章 <span class="external-link"><a class="no-external-link" href="https://www.zsythink.net/archives/2375" target="_blank"><i data-feather="external-link"></i>https://www.zsythink.net/archives/2375</a></span> <strong>ssh_key_file参数</strong>:当generate_ssh_key参数的值为yes时,使用此参数自定义生成ssh私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以”.pub”结尾。 <strong>ssh_key_comment参数</strong>:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置公钥中的注释信息,但是如果同名的密钥对已经存在,则并不会修改原来的注释信息,即不做任何操作,当不指定此参数时,默认的注释信息为”ansible-generated on 远程主机的主机名” <strong>ssh_key_passphrase参数</strong>:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置私钥的密码,但是如果同名的密钥对已经存在,则并不会修改原来的密码,即不做任何操作 <strong>ssh_key_type参数</strong>:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型,默认密钥类型为rsa,但是如果同名的密钥对已经存在,并不会对同名密钥做任何操作 user模块的ad-hoc示例命令如下: 在test70主机上创建名为zsy的用户,如果用户已经存在,则不进行任何操作。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy'</span></div> </div> </div> </div> 在test70主机上删除名为zsy的用户,但是不会删除zsy用户的家目录 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy state=absent'</span></div> </div> </div> </div> 在test70主机上删除名为zsy的用户,同时会删除zsy用户的家目录等信息 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=abc state=absent remove=yes'</span></div> </div> </div> </div> 指定test70主机上的zsy用户的主组为zsythink,zsythink组需要提前存在,当不使用group设置主组时,默认主组与用户名相同。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">"name=zsy group=zsythink"</span></div> </div> </div> </div> 指定test70主机上的zsy用户的附加组为zsythink,zsythink组需要提前存在,当不使用groups设置附属组时,默认附加组与用户名相同,注意,为了保险起见,在不知道用户原来的附加组设定的情况下,最好将append参数设置为yes,我们也可以一次性设置多个附加组,附加组之间用逗号隔开,比如groups=zsy,zsythink,root 示例命令如下 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">"name=zsy groups=zsythink append=yes"</span></div> </div> </div> </div> 指定test70主机上的zsy用户使用/bin/csh作为默认shell <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">"name=zsy shell=/bin/csh"</span></div> </div> </div> </div> 指定test70主机上的zsy用户的uid为2002 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">"name=zsy uid=2002"</span></div> </div> </div> </div> 指定test70主机上的zsy用户的过期时间为2018年12月31日,使用”date -d 2018-12-31 +%s”命令可以获取到对应日期的unix时间戳 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy expires=1546185600'</span></div> </div> </div> </div> 指定test70主机上的zsy用户的注释信息 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy comment="www.zsythink.net"'</span></div> </div> </div> </div> 将test70主机上的zsy用户的密码设置为666666 首先生成666666的加密字符串 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-g1">[</span><span class="enlighter-text">root@test71 ~</span><span class="enlighter-c0">]# python;</span></div> </div> <div class=""> <div><span class="enlighter-text">Python </span><span class="enlighter-n0">2.7</span><span class="enlighter-text">.</span><span class="enlighter-m3">5</span> <span class="enlighter-g1">(</span><span class="enlighter-text">default, Aug </span><span class="enlighter-n1">4</span> <span class="enlighter-n1">2017</span><span class="enlighter-text">, </span><span class="enlighter-n4">00</span><span class="enlighter-text">:</span><span class="enlighter-n1">39</span><span class="enlighter-text">:</span><span class="enlighter-n1">18</span><span class="enlighter-g1">)</span></div> </div> <div class=""> <div><span class="enlighter-g1">[</span><span class="enlighter-text">GCC </span><span class="enlighter-n0">4.8</span><span class="enlighter-text">.</span><span class="enlighter-m3">5</span> <span class="enlighter-m0">20150623</span> <span class="enlighter-g1">(</span><span class="enlighter-text">Red Hat </span><span class="enlighter-n0">4.8</span><span class="enlighter-text">.</span><span class="enlighter-m3">5</span><span class="enlighter-text">-</span><span class="enlighter-n1">16</span><span class="enlighter-g1">)]</span><span class="enlighter-text"> on linux2</span></div> </div> <div class=""> <div><span class="enlighter-text">Type </span><span class="enlighter-s0">"help"</span><span class="enlighter-text">, </span><span class="enlighter-s0">"copyright"</span><span class="enlighter-text">, </span><span class="enlighter-s0">"credits"</span><span class="enlighter-text"> or </span><span class="enlighter-s0">"license"</span> <span class="enlighter-k1">for</span><span class="enlighter-text"> more information.</span></div> </div> <div class=""> <div><span class="enlighter-g1">>>></span><span class="enlighter-text"> import crypt; crypt.</span><span class="enlighter-m3">crypt</span><span class="enlighter-g1">(</span><span class="enlighter-s0">'666666'</span><span class="enlighter-g1">)</span></div> </div> <div class=""> <div><span class="enlighter-s0">'$6$ygRbo7Fj.mMU2KY0$OEqihCCn5UfOsvMyzPNPBgx3bzAtwrOFyFvacgUmA374XOAEtUCrdjbW5Ip.Zqo491o3kD5I.HaC9nLhh6x741'</span></div> </div> </div> </div> 使用生成的密码字符串设置用户密码 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">' name=zsy password="$6$ygRbo7Fj.mMU2KY0$OEqihCCn5UfOsvMyzPNPBgx3bzAtwrOFyFvacgUmA374XOAEtUCrdjbW5Ip.Zqo491o3kD5I.HaC9nLhh6x741" '</span></div> </div> </div> </div> 如下命令表示设置test70主机上的zsy用户的密码,但是如果用户当前的加密字符串与命令中设置的加密字符串不一致,则不进行密码更新的操作。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy password="$6$a.ofrhIWn4gJGbi0$i6Xhr.F/YyhMe2UCodydwyF952bP4DOf0qYcGE8aK.EsgOR/GKU0Oy9Ov6oIH3RIJ9BnhvoVR9ozflmUJgxhL0" update_password=on_create'</span></div> </div> </div> </div> 为test70上的zsy用户生成ssh密钥对,默认在用户家目录的./ssh目录中生成名为id_rsa的私钥和名为id_rsa.pub的公钥,如果已经存在同名密钥,并不会覆盖原来的密钥,即不做任何操作。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy generate_ssh_key=yes'</span></div> </div> </div> </div> 为test70上的zsy用户生成ssh密钥对,密钥对生成在/opt目录下,私钥名为id_rsa_zsy,公钥名为id_rsa_zsy.pub <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy generate_ssh_key=yes ssh_key_file=/opt/id_rsa_zsy'</span></div> </div> </div> </div> 为test70上的zsy用户生成ssh密钥对,同时指定公钥中的注释信息为”www.zsythink.net”,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy generate_ssh_key=yes ssh_key_comment="www.zsythink.net"'</span></div> </div> </div> </div> 为test70上的zsy用户生成ssh密钥对,同时指定私钥的密码为123456,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy generate_ssh_key=yes ssh_key_passphrase="123456"'</span></div> </div> </div> </div> 为test70上的zsy用户生成ssh密钥对,同时指定密钥对的类型为dsa,当不显式指定密钥类型时,默认类型为rsa,此参数只能在创建密钥时使用才会生效,并不能操作同名的老密钥 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m user -a </span><span class="enlighter-s0">'name=zsy generate_ssh_key=yes ssh_key_type=dsa'</span></div> </div> </div> </div> <h2>group模块</h2> group模块可以帮助我们管理远程主机上的组。 此处我们介绍一些group模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。 <strong>name参数</strong>:必须参数,用于指定要操作的组名称。 <strong>state参数</strong>:用于指定组的状态,两个值可选,present,absent,默认为present,设置为absent表示删除组。 <strong>gid参数</strong>:用于指定组的gid group模块的ad-hoc示例命令如下: 确保test70主机中存在名为zsythink的组 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m group -a </span><span class="enlighter-s0">' name=zsythink'</span></div> </div> </div> </div> 删除test70主机中存在名为zsythink的组,删除成功的前提是不能有用户把被删除的组当成主组。 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m group -a </span><span class="enlighter-s0">' name=zsythink state=absent'</span></div> </div> </div> </div> 确保test70主机中存在名为zsythink的组,并且确定zsythink组的组id为1008 <div class="enlighter-default enlighter-v-standard enlighter-t-enlighter enlighter-hover enlighter-overflow-scroll"> <div class="enlighter-toolbar"> <div class="enlighter-btn enlighter-btn-raw"></div> <div class="enlighter-btn enlighter-btn-copy"></div> <div class="enlighter-btn enlighter-btn-window"></div> </div> <div class="enlighter"> <div class=""> <div><span class="enlighter-text">ansible test70 -m group -a </span><span class="enlighter-s0">'name=zsythink gid=1008'</span></div> <div>转载自朱双印日志https://www.zsythink.net/archives/2580</div> </div> </div> </div> Last modification:May 29, 2024 © Allow specification reprint Like 如果觉得我的文章对你有用,请随意赞赏