shell 如何检查文本是否存在

gtlvzcf8  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(142)

我怎样才能把这段代码写成ansible(yaml)格式呢?

grep -i "^\s*PermitRootLogin\s* no\s*" /etc/ssh/sshd_config
if [ $? -eq "0" ]
then
 echo "[ PASSED ] - Ensure SSH root login is disabled" 
else
  echo "[ FAILED ] - Ensure SSH root login is disabled"
fi

这是我所拥有的,我不知道该在什么时候写

- name: Check permitRootLogin
  hosts: web
  tasks:
    - lineinfile:
        path: /etc/ssh/sshd_config
        state: absent
        regexp: '^\s*PermitRootLogin\s* yes\s*'
      check_mode: yes
      register: permit

    - name: Ensure SSH root
      debug: 
        msg: 
         - "[ PASSED ] - Ensure SSH root login is disabled"
      when: $regexp == 'PermitRootLogin yes'
pb3skfrl

pb3skfrl1#

Ansible通常用于创建所需的状态。但是您可以像以前一样使用check_mode: yes来实现这一点,它并不是要实际写回更改,而只是模拟更改。然而,为此,您必须编写一个功能完整的任务。

- lineinfile:
    path: /etc/ssh/sshd_config
    state: present
    line: "\\g<1>yes"
    regexp: '^#?(PermitRootLogin\s+)'
    backrefs: yes
  check_mode: yes
  register: permit_root_login_result

- debug:
    msg: "[ PASSED ] - Ensure SSH root login is disabled"
  when: permit_root_login_result is not changed

在本例中,您模拟将PermitRootLogin行更改为值yes。如果发生了此更改,则该选项之前未设置为yes
如果要在PASSEDFAILED之间切换输出,则debug任务可能如下所示:

- debug:
    msg: "[ {{ permit_root_login_result is changed | ternary('FAILED', 'PASSED') }} ] - Ensure SSH root login is disabled"
rslzwgfq

rslzwgfq2#

您始终可以通过打印出寄存器的输出进行调试:

- name: Print result
  debug:
    msg: "{{ permit }}"

Ansible中的每个模块都有不同的输出。
当您根据用例获得输出/时,您可以选择在条件中使用哪个属性:

TASK [Print pass/fail result] *************************************************************
ok: [localhost] => {
    "msg": {
        "backup": "",
        "changed": false,
        "diff": [
            {
                "after": "",
                "after_header": "/etc/ssh/sshd_config (content)",
                "before": "",
                "before_header": "/etc/ssh/sshd_config (content)"
            },
            {
                "after_header": "/etc/ssh/sshd_config (file attributes)",
                "before_header": "/etc/ssh/sshd_config (file attributes)"
            }
        ],
        "failed": false,
        "found": 0,
        "msg": ""
    }
}

在本例中,您想知道是否找到PermitRootLogin yes行。
因此,您可以使用输出中的属性found

- name: Ensure SSH root login is disabled
  debug: 
    msg: 
     - "[ PASSED ] - Ensure SSH root login is disabled"
  when: permit.found == 0

- name: Ensure SSH root login is enabled
  debug: 
    msg: 
     - "[ PASSED ] - Ensure SSH root login is enabled"
  when: permit.found != 0

相关问题