090600
This commit is contained in:
193
README.md
193
README.md
@@ -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
|
||||
```
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user