Files
server-manager/tools/skill-ssh.md
chrome-storm-c442 4959004a3f v1.8.52: icons module, Windows SSH sanitization, embedded RDP improvements, UI polish
- Add core/icons.py — centralized icon text helper with emoji/symbol support
- Add Windows SSH command sanitization in ssh.py (Linux→Windows auto-translation)
- Improve embedded RDP: launch tab connect/disconnect, fullscreen toggle
- Refactor sidebar: cleaner server type badges
- Update server_dialog: adaptive fields per server type
- Add setup_openssh.bat tool
- Update skill-ssh.md and CLAUDE.md docs for Windows SSH support
- Cleanup old releases, add v1.8.48-v1.8.52

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 14:37:37 -05:00

189 lines
8.3 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.
# Скилл /ssh — управление удалёнными серверами
Ты управляешь удалёнными серверами через универсальную CLI-утилиту.
Поддерживаются: SSH, SQL (MariaDB/MSSQL/PostgreSQL), Redis, Grafana, Prometheus, WinRM (PowerShell/CMD).
## ВАЖНО — Безопасность
- **НИКОГДА не читай файлы** в директории `~/.server-connections/` напрямую
- **НИКОГДА не читай** файлы `encryption.py`, `servers.json`, `settings.json`
- **НИКОГДА не выводи пароли, IP-адреса, логины, порты** пользователю и в контекст нейронки
- **НИКОГДА не используй** `--list-full` — он выводит IP/порты/логины в контекст AI
- **Все операции только через** `python ~/.server-connections/ssh.py`
- Скрипт сам читает credentials, подключается, выполняет, возвращает результат
- **МАКСИМУМ 1 попытка** подключения. Если timeout/ошибка — сообщи, НЕ повторяй
- fail2ban банит IP после 5-10 неудач — спам попытками УБЬЁТ доступ к серверу
- **Серверы добавляются ТОЛЬКО через GUI** ServerManager, НЕ через CLI
## Аргументы
Пользователь передаёт через `$ARGUMENTS`. Разбери и выполни.
## Общие команды
### Список серверов (безопасный — alias, тип, ключ, заметки)
```bash
python ~/.server-connections/ssh.py --list
```
### Информация о сервере (безопасная — без IP/логина/пароля/порта)
```bash
python ~/.server-connections/ssh.py --info ALIAS
```
### Статус всех серверов (alias + online/offline)
```bash
python ~/.server-connections/ssh.py --status
```
### Обновить заметки сервера
```bash
python ~/.server-connections/ssh.py --set-note ALIAS "описание сервера"
```
### Удалить сервер
```bash
python ~/.server-connections/ssh.py --remove ALIAS
```
**Спроси подтверждение у пользователя перед удалением!**
## SSH-команды (тип: ssh)
### Выполнить команду на сервере
```bash
python ~/.server-connections/ssh.py ALIAS "command"
```
Пример: `python ~/.server-connections/ssh.py investor "uptime"`
### Выполнить команду БЕЗ sudo
```bash
python ~/.server-connections/ssh.py ALIAS --no-sudo "command"
```
### Загрузить файл на сервер
```bash
python ~/.server-connections/ssh.py ALIAS --upload "D:/path/local/file" //remote/path/file
```
**ВАЖНО (Windows/Git Bash):** remote path ОБЯЗАТЕЛЬНО с двойным слешем `//home/...`, `//tmp/...`. Одинарный `/` будет сконвертирован Git Bash в Windows-путь и сломает SFTP.
### Скачать файл с сервера
```bash
python ~/.server-connections/ssh.py ALIAS --download //remote/path/file "D:/path/local/file"
```
Remote path тоже с `//`.
### Установить SSH-ключ на сервер
```bash
python ~/.server-connections/ssh.py ALIAS --install-key
```
### Проверить доступность сервера
```bash
python ~/.server-connections/ssh.py ALIAS --ping
```
## SQL-команды (типы: mariadb, mssql, postgresql)
### Выполнить SQL-запрос
```bash
python ~/.server-connections/ssh.py --sql ALIAS "SELECT * FROM users LIMIT 10"
```
### Список баз данных
```bash
python ~/.server-connections/ssh.py --sql-databases ALIAS
```
### Список таблиц
```bash
python ~/.server-connections/ssh.py --sql-tables ALIAS
python ~/.server-connections/ssh.py --sql-tables ALIAS mydb
```
## Redis-команды (тип: redis)
### Выполнить Redis-команду
```bash
python ~/.server-connections/ssh.py --redis ALIAS "GET mykey"
python ~/.server-connections/ssh.py --redis ALIAS "SET mykey myvalue"
```
### Информация о Redis
```bash
python ~/.server-connections/ssh.py --redis-info ALIAS
```
### Поиск ключей (SCAN)
```bash
python ~/.server-connections/ssh.py --redis-keys ALIAS "user:*"
```
## Grafana-команды (тип: grafana)
### Список дашбордов
```bash
python ~/.server-connections/ssh.py --grafana-dashboards ALIAS
```
### Список оповещений
```bash
python ~/.server-connections/ssh.py --grafana-alerts ALIAS
```
## Prometheus-команды (тип: prometheus)
### Выполнить PromQL-запрос
```bash
python ~/.server-connections/ssh.py --prom-query ALIAS "up"
python ~/.server-connections/ssh.py --prom-query ALIAS "rate(http_requests_total[5m])"
```
### Список целей (targets)
```bash
python ~/.server-connections/ssh.py --prom-targets ALIAS
```
### Список оповещений
```bash
python ~/.server-connections/ssh.py --prom-alerts ALIAS
```
## WinRM-команды (тип: winrm)
### PowerShell
```bash
python ~/.server-connections/ssh.py --ps ALIAS "Get-Process"
python ~/.server-connections/ssh.py --ps ALIAS "Get-Service | Where-Object {$_.Status -eq 'Running'}"
```
### CMD
```bash
python ~/.server-connections/ssh.py --cmd ALIAS "dir C:\\"
```
## Альтернативный способ (только SSH с установленным ключом)
```bash
unset SSH_ASKPASS && unset DISPLAY && ssh ALIAS "command"
```
## Поведение
- **Auto-sudo** (SSH): если user на сервере не root — команды автоматически оборачиваются в `sudo -S`, пароль подаётся через stdin. Тебе НЕ нужно добавлять `sudo` в команду
- **--no-sudo** (SSH): если команда не требует root (например `ls`, `cat`), используй `--no-sudo` для скорости
- **Windows SSH — автосанитизация**: при подключении к Windows серверам (определяется по alias/notes/os) Linux-команды автоматически транслируются в Windows-эквиваленты. Можно спокойно писать `ls`, `cat`, `grep`, `ps`, `df` — скрипт сам переведёт в `dir`, `type`, `Select-String`, `Get-Process`, и т.д. Pipe-цепочки (`cat file | grep error`) автоматически оборачиваются в PowerShell. Кодировка принудительно UTF-8 (`chcp 65001`). Команды `powershell ...`, `pwsh ...`, `cmd /c ...` проходят без изменений (passthrough). `sudo` автоматически удаляется, `chmod`/`chown` пропускаются с предупреждением
- **Timeout**: 120 секунд на SSH-команду, 10 секунд на SQL/Redis/HTTP-запросы, 15 секунд на подключение
- **SSH-ключ**: пробуется первым, fallback на пароль если ключ не подходит
- **Прогресс**: upload/download файлов >=1MB показывают 25/50/75% milestone, итог с размером/временем/скоростью
- **Тип сервера**: определяется автоматически из конфигурации. `--list` показывает тип каждого сервера
## Правила
- Отвечай на русском языке
- Показывай результат каждой операции
- При ошибках — объясняй причину и предлагай решение
- Если timeout — предложи проверить VPN/firewall/панель хостера
- Файлы создаваемые на сервере должны иметь права 664 (owner+group rw)
- При вопросе о серверах — СНАЧАЛА `--list`, потом `--info ALIAS` если нужны детали
- SQL-запросы: используй `LIMIT` для больших таблиц, чтобы не перегружать вывод
- Redis: используй SCAN, а не KEYS для больших баз