5.5 KiB
Executable File
5.5 KiB
Executable File
🔐 Bulk SSH Commands - Массовое выполнение команд
✨ Описание
Bulk SSH Commands позволяет выполнять SSH команды на множестве машин одновременно с гибкой системой авторизации.
🎯 3 Режима Авторизации
1️⃣ Saved Credentials (Рекомендуется)
✅ Использование: Saved machines с credentials в БД
✅ Безопасность: Высокая (encrypted в БД)
✅ UX: Простой (нет ввода)
❌ Ограничение: Только для saved machines
Как работает:
- Credentials расшифровываются из БД
- Автоматически применяются для каждой машины
- Не требует ввода пароля
2️⃣ Global Credentials (Простой)
✅ Использование: Одинаковые credentials для всех машин
✅ UX: Быстрый (один ввод)
✅ Гибкость: Можно override saved credentials
⚠️ Безопасность: Средняя (один пароль для всех)
UI:
Username: [root ]
Password: [************]
3️⃣ Custom Credentials (Гибкий)
✅ Использование: Разные credentials для каждой машины
✅ Безопасность: Высокая
✅ Гибкость: Максимальная
❌ UX: Сложный (много вводить)
UI:
Quick Fill: [username] [password] [Copy to All]
Machine 1: [username] [password]
Machine 2: [username] [password]
Machine 3: [username] [password]
🔐 Role-based Permissions
Limits:
| Role | Max Machines | Commands |
|---|---|---|
| GUEST | ❌ 0 | Forbidden |
| USER | ✅ 20 | Whitelist only |
| ADMIN | ✅ 100 | Any commands |
| SUPER_ADMIN | ✅ 100 | Any commands |
USER Whitelist:
allowed_commands = [
"uptime",
"df -h",
"free -m",
"top -bn1",
"systemctl status",
"docker ps",
"ps aux",
"ls -la",
"cat /etc/os-release",
"hostname"
]
📊 API Reference
POST /bulk/ssh-command
Request:
{
"machine_ids": ["abc123...", "def456..."],
"command": "systemctl restart nginx",
"credentials_mode": "global",
"global_credentials": {
"username": "root",
"password": "secure_password"
},
"timeout": 30
}
Response:
{
"total": 2,
"success": 2,
"failed": 0,
"execution_time_ms": 2400,
"command": "systemctl restart nginx",
"results": [
{
"machine_id": "abc123...",
"machine_name": "web-01",
"hostname": "192.168.1.10",
"status": "success",
"exit_code": 0,
"stdout": "nginx restarted",
"stderr": "",
"execution_time_ms": 1200
}
]
}
🎨 UI Flow
1. Bulk Select → выбрать машины
2. Click "Run Command" → modal открывается
3. Выбрать режим: [Saved] [Global] [Custom]
4. Ввести команду: "systemctl restart nginx"
5. Заполнить credentials (если нужно)
6. Execute → параллельное выполнение
7. Результаты → expandable stdout/stderr
8. Export CSV / Retry Failed
🔒 Security Best Practices
- ✅ Use Saved Credentials когда возможно
- ✅ Whitelist commands для USER role
- ✅ Command audit logging для всех операций
- ✅ Concurrency limits (max 10 concurrent SSH)
- ✅ Timeout protection (5-300 seconds)
📋 Use Cases
1. Restart service на всех web серверах
Select: tags="webserver" (15 machines)
Command: systemctl restart nginx
Mode: Saved credentials
Result: 15/15 success
2. Check disk space на prod серверах
Select: tags="production" (50 machines)
Command: df -h
Mode: Saved credentials
Result: Export to CSV для анализа
⚠️ Production Notes
SSH Implementation:
# Current: DEMO mode (sshpass fallback)
# Production: Use paramiko
pip install paramiko
import paramiko
client = paramiko.SSHClient()
client.connect(hostname, username=username, password=password)
stdin, stdout, stderr = client.exec_command(command)
🐛 Troubleshooting
Issue: "Command not in whitelist"
Error: USER role tried to run "rm -rf /"
Solution:
1. Contact administrator for command approval
2. Or request ADMIN role upgrade
Issue: "No saved credentials available"
Cause: Machine не имеет saved credentials
Solution:
1. Use "Global" mode
2. Or save credentials first
🎓 Examples
// Example 1: Check uptime (USER role)
Command: "uptime"
Mode: Saved
Result: ✅ 10/10 success
// Example 2: Restart nginx (ADMIN role)
Command: "systemctl restart nginx"
Mode: Global (root/password)
Result: ✅ 19/20 success, ❌ 1 failed
// Example 3: Custom per machine
Command: "systemctl status postgresql"
Mode: Custom (different users)
Result: ✅ 5/5 success
🎉 Bulk SSH Commands полностью реализованы!