Ansible - 在 CentOS 6 中删除登录窗口

Posted

技术标签:

【中文标题】Ansible - 在 CentOS 6 中删除登录窗口【英文标题】:Ansible - Remove login window in CentOS 6 【发布时间】:2020-10-01 09:44:50 【问题描述】:

我为 CentOS 工作站编写了一个强化脚本,但我被困在 Cent6 系统的进程中,我想删除登录屏幕并让用户输入他们的登录 ID。

文件是:

/etc/gconf/gconf.xml.defaults/%gconf-tree.xml

这是我要编辑的行:

<entry name="disable_user_list" mtime="1558109430" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm">
  <local_schema locale="C" short_desc="Do not show known users in the login window">
     <default type="bool" value="false"/>
     <longdesc>Set to true to disable showing known users in the login window.</longdesc>
   </local_schema>
</entry>

我需要编辑的行是:

value="false"

到:

value="true"

因为此文件中有多个“disabe_user_list”,我不确定如何使用inlinefile 选项来编辑此特定字段。我很确定可能有一个我可以使用的正则表达式,但我想不通。

有人有什么想法吗?

【问题讨论】:

你考虑过docs.ansible.com/ansible/latest/modules/xml_module.html吗? 对 xml 使用正则表达式总是在我脑海中浮现 :) ***.com/a/1732454/2123530 【参考方案1】:

TL;DR;

这里有一个可能的解决方案

- xml:
    path: /etc/gconf/gconf.xml.defaults/%gconf-tree.xml
    xpath: "/entry[@name='disable_user_list']/local_schema[@short_desc='Do not show known users in the login window']/default[@type='bool']"
    attribute: value
    value: "true"

xml 模块似乎比使用正则表达式更好。

这可能是适合您的解决方案,但是,当然,您必须使用文件中可能包含的其他 disabe_user_list 条目来验证这一点。

本剧本中的 XPath 认为此条目是唯一的,基于以下事实:

    entry 节点被命名为disable_user_list entry 下的local_schema 节点有一个short_desc 阅读“不要在登录窗口中显示已知用户” local_schema 下的default 节点属于typebool

基于此,任务将定位value 属性并将其设置为true

鉴于这本剧本

- hosts: local
  gather_facts: no

  tasks:
    - xml:
        path: /etc/gconf/gconf.xml.defaults/%gconf-tree.xml
        xpath: "/entry[@name='disable_user_list']/local_schema[@short_desc='Do not show known users in the login window']/default[@type='bool']"
        attribute: value
        value: "true"

这里是一个执行的例子

cat /etc/gconf/gconf.xml.defaults/%gconf-tree.xml && ansible-playbook play.yml && cat /etc/gconf/gconf.xml.defaults/\%gconf-tree.xml 
<?xml version='1.0' encoding='UTF-8'?>
<entry name="disable_user_list" mtime="1558109430" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm">
  <local_schema locale="C" short_desc="Do not show known users in the login window">
     <default type="bool" value="false"/>
     <longdesc>Set to true to disable showing known users in the login window.</longdesc>
   </local_schema>
</entry>
PLAY [local] ***********************************************************************************************************************************************************************************************

TASK [xml] *************************************************************************************************************************************************************************************************
changed: [local]

PLAY RECAP *************************************************************************************************************************************************************************************************
local                      : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 
<?xml version='1.0' encoding='UTF-8'?>
<entry name="disable_user_list" mtime="1558109430" type="schema" stype="bool" owner="gdm-simple-greeter" gettext_domain="gdm">
  <local_schema locale="C" short_desc="Do not show known users in the login window">
     <default type="bool" value="true"/>
     <longdesc>Set to true to disable showing known users in the login window.</longdesc>
   </local_schema>
</entry>

【讨论】:

以上是关于Ansible - 在 CentOS 6 中删除登录窗口的主要内容,如果未能解决你的问题,请参考以下文章

基于Centos6.6(7.2)源码安装Ansible

使用 Ansible 批量安装 Grc

CentOS 6.5使用 安装ansible

如何使用ansible在CentOS 6.5上安装nginx

ansible

centos ansible安装配置