Files
commander/README.md
2025-06-09 19:34:56 +09:00

194 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🛠 Универсальный скрипт для запуска команд Windows с логированием
## Введение
Привет! Одна из частых задач — **выполнить серию системных команд**, зафиксировать результат, отловить ошибки и сохранить лог. Чтобы не делать это вручную каждый раз, я подготовил универсальный скрипт, который:
- Выполняет команды из YAML-файла
- Сохраняет логи в отдельную папку
- Показывает stdout, stderr и статус выполнения
- Удобен для расширения и автоматизации
---
## 🧩 Структура проекта
```
old_scripts/
├── run_commands.py # основной скрипт win
├── script.sh # основной скрипт unix
├── commands.yaml # конфигурация команд
└── logs/ # автоматически создаётся, сюда пишутся логи
```
---
## 📜 Файл `commands.yaml`
Можно добавлять любые команды. Главное — указать поле `name` и `command`.
---
## 🔍 Пример запуска
### ** 1. Python версия скрипта для Windows-хостов**
```bash
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)
```yaml
- name: Deploy graylog collector
hosts: all
roles:
- graylog_collector
```
## 🔍 Пример использования
### Поиск в Graylog
```json
source:server01 AND "Domain Admins"
```
### Визуализация в Grafana
```sql
SELECT host, COUNT(*)
FROM graylog_messages
WHERE full_message LIKE '%error%'
GROUP BY host
```
## 🛠️ Кастомизация
### Добавление своих команд
1. Для Windows: редактируем `files/commands.yaml`
```yaml
- name: Check DNS
command: nslookup example.com
```
2. Для Linux: редактируем `files/collect_info.sh`
```bash
commands+=("dig example.com")
```
### Настройка Graylog
В `defaults/main.yml`:
```yaml
graylog_host: logs.mycompany.com
graylog_port: 12201
windows_log_dir: C:\Collector\Logs
linux_log_dir: /var/log/collector
```
## ⚠️ Решение проблем
### Частые ошибки Windows
```fix
# В PowerShell:
Enable-PSRemoting -Force
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any
```
### Ошибки подключения Linux
```bash
# На целевой машине:
sudo systemctl restart sshd
```
### Проблемы с Graylog
1. Проверить открытость порта:
```bash
nc -vz logs.mycompany.com 12201
```
2. Проверить GELF input в веб-интерфейсе Graylog
## 📈 Расширенные сценарии
### Планирование регулярного сбора
Добавляем в `tasks/main.yml`:
```yaml
- 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"
```
### Обработка ошибок
В скриптах добавляем обработку исключений:
```python
try:
# выполнение команды
except Exception as e:
logging.error(f"Command failed: {str(e)}")
```
## 💡 Советы из практики
### 1. **Фильтрация чувствительных данных:**
```python
# В run_commands.py
if "password" in command.lower():
logging.warning("Skipping potential sensitive command")
continue
```
### 2. **Сжатие логов** перед отправкой:
```python
import zlib
compressed = zlib.compress(log_content.encode())
```
### 3. **Маркировка хостов** в Graylog:
```python
message["_environment"] = "production"
```
### 4. Запускаем плейбук
```bash
ansible-playbook -i inventory/hosts.ini playbook.yml
```
---