Правильная конфигурация YAML для роли ansible ssh_security

Вопрос или проблема

Я создаю роль Ansible для настройки безопасности SSH на серверах, следуя документации. Вот мой файл конфигурации YAML:

---
- name: Включить безопасность SSH
  hosts: веб-серверы
  tasks:
      - name: Убедиться, что SSH установлен
        apt:
          name: openssh-server
          state: present

      - name: Настроить SSH для отключения аутентификации по паролю
        lineinfile:
          path: /etc/ssh/sshd_config
          regexp: '^#?PasswordAuthentication'
          line: 'PasswordAuthentication no'
        notify: Перезапустить SSH

      - name: Убедиться, что аутентификация с использованием открытого ключа включена
        lineinfile:
          path: /etc/ssh/sshd_config
          regexp: '^#?PubkeyAuthentication'
          line: 'PubkeyAuthentication yes'
        notify: Перезапустить SSH

      - name: Отключить доступ к SSH для root
        lineinfile:
          path: /etc/ssh/sshd_config
          regexp: '^#?PermitRootLogin'
          line: 'PermitRootLogin no'
        notify: Перезапустить SSH

  handlers:
      - name: Перезапустить SSH
        service:
          name: ssh
          state: restarted

Кажется, все правильно и хорошо отформатировано, однако когда я запускаю плейбук, я получаю эту ошибку:

SSH пароль: 
BECOME пароль [по умолчанию совпадает с паролем SSH]: 
ERROR! конфликтующие инструкции действия: hosts, tasks

Ошибка, похоже, находится в '/<полный путь>/Hetzner/roles/ssh_security/tasks/main.yml': строка 2, столбец 3, но может
быть и в другом месте файла в зависимости от точной проблемы с синтаксисом.

Проблемная строка, похоже, выглядит так:

---
- name: Включить безопасность SSH
  ^ здесь

Парсер yaml в IDE Pycharm не указывает на эту ошибку. Что может быть не так в этой конфигурации?

Вы смешиваете синтаксис плейбука и роли. Вы используете структуру плейбука внутри задач ролей.

Используйте это как основной плейбук:

---
- hosts: веб-серверы
  roles:
    - ssh_security

и /<полный путь>/Hetzner/roles/ssh_security/tasks/main.yml следующего вида:

- name: Убедиться, что SSH установлен
  apt:
    name: openssh-server
    state: present
[...]

поместите обработчик в /<полный путь>/Hetzner/roles/ssh_security/handlers/main.yml

Ответ или решение

Конфигурация Ansible для роли ssh_security: Как правильно настроить YAML

Создание роли Ansible для обеспечения безопасности SSH на серверах является важной задачей, требующей внимательного подхода к синтаксису и структуре файлов. Ваша текущая конфигурация YAML содержит некоторые синтаксические ошибки, которые могут привести к сбоям при выполнении плейбука. Давайте подробно разберем, как правильно организовать ваш проект.

Структура файлов Ansible

В Ansible роль состоит из нескольких файлов и директорий, каждая из которых выполняет свою функцию. Правильная структура вашей роли ssh_security должна выглядеть следующим образом:

ssh_security/
├── handlers/
│   └── main.yml
├── tasks/
│   └── main.yml
└── meta/
    └── main.yml

1. Основной плейбук

Ваш основной плейбук должен вызывать роль. Примерный код вашего плейбука может выглядеть так:

---
- hosts: webservers
  roles:
    - ssh_security

Сохраните этот файл, например, как site.yml или другое название на ваше усмотрение.

2. Задачи роли

В файле /путь/к/вашему/проекту/roles/ssh_security/tasks/main.yml вы должны разместить только задачи без структуры плейбука. Пример ваших задач в этом файле:

- name: Ensure SSH is installed
  apt:
    name: openssh-server
    state: present

- name: Configure SSH to disable password authentication
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PasswordAuthentication'
    line: 'PasswordAuthentication no'
  notify: Restart SSH

- name: Ensure public key authentication is enabled
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PubkeyAuthentication'
    line: 'PubkeyAuthentication yes'
  notify: Restart SSH

- name: Disable root SSH access
  lineinfile:
    path: /etc/ssh/sshd_config
    regexp: '^#?PermitRootLogin'
    line: 'PermitRootLogin no'
  notify: Restart SSH

3. Обработчики

Важной частью управления задачами в Ansible являются обработчики. Все обработчики должны находиться в файле /путь/к/вашему/проекту/roles/ssh_security/handlers/main.yml:

- name: Restart SSH
  service:
    name: ssh
    state: restarted

Общие рекомендации

  • Синтаксическая проверка: всегда проверяйте свой YAML-код на наличие возможных синтаксических ошибок. Вы можете использовать онлайн-валидаторы или встроенные инструменты в вашей IDE (например, PyCharm).
  • Документация: ознакомьтесь с официальной документацией Ansible для понимания структуры ролей и плейбуков.
  • Проверка исполнения: перед тем как запускать плейбук на рабочем окружении, тестируйте его на локальных или тестовых серверах.

Заключение

Следуя этим рекомендациям и исправив структуру ваших файлов, вы сможете успешно выполнить плейбук Ansible для обеспечения безопасности SSH. Применение правильного синтаксиса и структурирования ресурсов Ansible важно для автоматизации и управления безопасностью ваших серверов.

Оцените материал
Добавить комментарий

Капча загружается...