This commit is contained in:
2025-06-09 19:34:56 +09:00
parent 02a10ca391
commit cdc4e209c7
15 changed files with 490 additions and 1 deletions

193
README.md
View File

@@ -1,2 +1,193 @@
# commander
# 🛠 Универсальный скрипт для запуска команд 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
```
---