Вопрос или проблема
Я создаю роль 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 важно для автоматизации и управления безопасностью ваших серверов.