2025-07-12 07:57:07 +09:00
2025-06-09 19:34:56 +09:00
2025-06-09 19:34:56 +09:00
2025-06-09 19:34:56 +09:00
2025-06-09 19:34:56 +09:00
2025-07-12 07:57:07 +09:00
2025-06-09 19:34:56 +09:00
2025-06-09 19:34:56 +09:00

🛠 Универсальный скрипт для запуска команд Windows с логированием

Введение

Привет! Одна из частых задач — выполнить серию системных команд, зафиксировать результат, отловить ошибки и сохранить лог. Чтобы не делать это вручную каждый раз, я подготовил универсальный скрипт, который:

  • Выполняет команды из YAML-файла
  • Сохраняет логи в отдельную папку
  • Показывает stdout, stderr и статус выполнения
  • Удобен для расширения и автоматизации

🧩 Структура проекта

old_scripts/
├── run_commands.py       # основной скрипт win
├── script.sh		      # основной скрипт unix
├── commands.yaml         # конфигурация команд
└── logs/                 # автоматически создаётся, сюда пишутся логи

📜 Файл commands.yaml

Можно добавлять любые команды. Главное — указать поле name и command.


🔍 Пример запуска

** 1. Python версия скрипта для Windows-хостов**

python run_commands.py

В консоли будет отображаться ход выполнения, а весь лог сохраняется в logs/commands_*.log.


2. Bash-версия скрипта для Linux-хостов

Не забудь chmod +x script.sh
Можно запускать из Ansible с shell или script.


⚙️ Настройка Ansible

Структура проекта

graylog-collector/
├── inventory/
│   └── hosts.ini
├── playbook.yml
└── roles/
    └── graylog_collector/
        ├── tasks/
        │   ├── main.yml
        │   ├── windows.yml
        │   └── linux.yml
        ├── files/
        │   ├── run_commands.py
        │   ├── collect_info.sh
        │   └── graylog_sender.py
        └── defaults/
            └── main.yml

Плейбук (playbook.yml)

- name: Deploy graylog collector
  hosts: all
  roles:
    - graylog_collector

🔍 Пример использования

Поиск в Graylog

source:server01 AND "Domain Admins"

Визуализация в Grafana

SELECT host, COUNT(*) 
FROM graylog_messages 
WHERE full_message LIKE '%error%'
GROUP BY host

🛠️ Кастомизация

Добавление своих команд

  1. Для Windows: редактируем files/commands.yaml
- name: Check DNS
  command: nslookup example.com
  1. Для Linux: редактируем files/collect_info.sh
commands+=("dig example.com")

Настройка Graylog

В defaults/main.yml:

graylog_host: logs.mycompany.com
graylog_port: 12201
windows_log_dir: C:\Collector\Logs
linux_log_dir: /var/log/collector

⚠️ Решение проблем

Частые ошибки Windows

# В PowerShell:
Enable-PSRemoting -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any

Ошибки подключения Linux

# На целевой машине:
sudo systemctl restart sshd

Проблемы с Graylog

  1. Проверить открытость порта:
nc -vz logs.mycompany.com 12201
  1. Проверить GELF input в веб-интерфейсе Graylog

📈 Расширенные сценарии

Планирование регулярного сбора

Добавляем в tasks/main.yml:

- name: Schedule daily collection (Windows)
  win_scheduled_task:
    name: "Daily System Info"
    description: "Collect system information"
    actions:
      - path: "python"
        arguments: "C:\\Collector\\run_commands.py"
    triggers:
      - type: daily
        start_time: "03:00"

Обработка ошибок

В скриптах добавляем обработку исключений:

try:
    # выполнение команды
except Exception as e:
    logging.error(f"Command failed: {str(e)}")

💡 Советы из практики

1. Фильтрация чувствительных данных:

# В run_commands.py
if "password" in command.lower():
    logging.warning("Skipping potential sensitive command")
    continue

2. Сжатие логов перед отправкой:

import zlib
compressed = zlib.compress(log_content.encode())

3. Маркировка хостов в Graylog:

message["_environment"] = "production"

4. Запускаем плейбук

ansible-playbook -i inventory/hosts.ini playbook.yml

Description
No description provided
Readme 40 KiB
Languages
Python 95.1%
Shell 4.9%