From 3bafb0deb8a54884244811db8da2f50e8932a405 Mon Sep 17 00:00:00 2001 From: chrome-storm-c442 Date: Thu, 5 Mar 2026 02:25:41 -0500 Subject: [PATCH] =?UTF-8?q?skill:=20enforce=20server=20type=20checking=20?= =?UTF-8?q?=E2=80=94=20MinIO/S3,=20presigned=20URL,=20workflow=20examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 9 ++++- tools/skill-ssh.md | 82 +++++++++++++++++++++++++++++++++------------- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index a664012..d009808 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -26,7 +26,7 @@ ServerManager — **кроссплатформенное** Desktop GUI (CustomTk | grafana | `grafana_client.py` (requests) | Dashboards, Info, Setup | `--grafana-dashboards`, `--grafana-alerts` | | prometheus | `prometheus_client.py` (requests) | Metrics, Info, Setup | `--prom-query`, `--prom-targets`, `--prom-alerts` | | winrm | `winrm_client.py` (pywinrm) | PowerShell, Info, Setup | `--ps`, `--cmd` | -| s3 | `s3_client.py` (boto3) | Objects, Info, Setup | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete` | +| s3 | `s3_client.py` (boto3) | Objects, Info, Setup | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete`, `--s3-url` | | rdp/vnc | `remote_desktop.py` | Launch, Info, Setup | — (запуск внешнего клиента) | ## БЕЗОПАСНОСТЬ @@ -139,6 +139,13 @@ tools/ /ssh --redis ALIAS "GET key" # Redis-команда /ssh --redis-info ALIAS # Redis INFO /ssh --redis-keys ALIAS "pattern" # SCAN ключей +# S3 / MinIO +/ssh --s3-buckets ALIAS # Список бакетов +/ssh --s3-ls ALIAS bucket[/prefix] # Список объектов +/ssh --s3-upload ALIAS local bucket/key # Upload файла +/ssh --s3-download ALIAS bucket/key local # Download файла +/ssh --s3-delete ALIAS bucket/key # Удалить объект +/ssh --s3-url ALIAS bucket/key [SEC] # Presigned URL (по умолчанию 1 час) # Grafana / Prometheus /ssh --grafana-dashboards ALIAS # Дашборды /ssh --prom-query ALIAS "up" # PromQL diff --git a/tools/skill-ssh.md b/tools/skill-ssh.md index 4b0b8af..637147d 100644 --- a/tools/skill-ssh.md +++ b/tools/skill-ssh.md @@ -1,7 +1,7 @@ # Скилл /ssh — управление удалёнными серверами Ты управляешь удалёнными серверами через универсальную CLI-утилиту. -Поддерживаются: SSH, SQL (MariaDB/MSSQL/PostgreSQL), Redis, S3, Grafana, Prometheus, WinRM (PowerShell/CMD). +Поддерживаются: SSH, SQL (MariaDB/MSSQL/PostgreSQL), Redis, S3/MinIO, Grafana, Prometheus, WinRM (PowerShell/CMD). ## ВАЖНО — Безопасность @@ -19,33 +19,47 @@ Пользователь передаёт через `$ARGUMENTS`. Разбери и выполни. -## КРИТИЧНО — Команды зависят от типа сервера +## КРИТИЧНО — СНАЧАЛА ПРОВЕРЬ ТИП СЕРВЕРА -`--list` возвращает колонку `Type` для каждого сервера. **Тип определяет какие команды использовать:** +**ПЕРЕД ЛЮБОЙ операцией** с сервером — **ОБЯЗАТЕЛЬНО** выполни `--list` и посмотри колонку `Type`. +**ЗАПРЕЩЕНО** угадывать тип сервера. MinIO/S3 — это НЕ SSH, Redis — это НЕ SSH, MariaDB — это НЕ SSH. -| Тип | Команды | -|-----|---------| -| `ssh` | `ALIAS "command"`, `--upload`, `--download`, `--ping`, `--install-key` | -| `telnet` | `ALIAS "command"` (как ssh, но без SFTP/sudo/ключей) | -| `mariadb` / `mssql` / `postgresql` | `--sql`, `--sql-databases`, `--sql-tables` | -| `redis` | `--redis`, `--redis-info`, `--redis-keys` | -| `s3` | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete` | -| `grafana` | `--grafana-dashboards`, `--grafana-alerts` | -| `prometheus` | `--prom-query`, `--prom-targets`, `--prom-alerts` | -| `winrm` | `--ps`, `--cmd` | -| `rdp` / `vnc` | Только GUI (запуск внешнего клиента), CLI-команд нет | +**Тип сервера определяет КАКИЕ команды использовать. Использование команд не того типа — СЛОМАЕТ операцию.** -**`ALIAS "command"` — ТОЛЬКО для типа `ssh`.** Для Redis — `--redis`, для SQL — `--sql`, для WinRM — `--ps`/`--cmd` и т.д. +| Тип | Команды | НЕ использовать | +|-----|---------|-----------------| +| `ssh` | `ALIAS "command"`, `--upload`, `--download`, `--ping`, `--install-key` | — | +| `telnet` | `ALIAS "command"` (без SFTP/sudo/ключей) | `--upload`, `--download` | +| `mariadb` / `mssql` / `postgresql` | `--sql`, `--sql-databases`, `--sql-tables` | `ALIAS "command"` | +| `redis` | `--redis`, `--redis-info`, `--redis-keys` | `ALIAS "command"` | +| `s3` (MinIO, AWS S3, и др.) | `--s3-buckets`, `--s3-ls`, `--s3-upload`, `--s3-download`, `--s3-delete`, `--s3-url` | `ALIAS "command"`, `--upload`, `--download` | +| `grafana` | `--grafana-dashboards`, `--grafana-alerts` | `ALIAS "command"` | +| `prometheus` | `--prom-query`, `--prom-targets`, `--prom-alerts` | `ALIAS "command"` | +| `winrm` | `--ps`, `--cmd` | `ALIAS "command"` | +| `rdp` / `vnc` | Только GUI | всё | + +**`ALIAS "command"` (shell-команды типа ls, cat, mkdir) — ТОЛЬКО для типов `ssh` и `telnet`.** ```bash -# Тип redis → --redis-info, НЕ ALIAS "INFO" -python ~/.server-connections/ssh.py --redis-info "Reddis main ovh" +# ❌ НЕПРАВИЛЬНО — MinIO/S3 это НЕ SSH, нельзя выполнять shell-команды +python ~/.server-connections/ssh.py "minio-alias" "ls /bucket" +python ~/.server-connections/ssh.py "minio-alias" "mkdir /bucket/folder" -# Тип mariadb → --sql-databases, НЕ ALIAS "SHOW DATABASES" -python ~/.server-connections/ssh.py --sql-databases "Maria Db Connection main ovh" +# ✅ ПРАВИЛЬНО — S3-команды для типа s3 +python ~/.server-connections/ssh.py --s3-ls "minio-alias" bucket +python ~/.server-connections/ssh.py --s3-upload "minio-alias" "D:/file.txt" bucket/folder/file.txt -# Тип ssh → ALIAS "command" -python ~/.server-connections/ssh.py investor "uptime" +# ❌ НЕПРАВИЛЬНО — Redis это НЕ SSH +python ~/.server-connections/ssh.py "redis-alias" "INFO" + +# ✅ ПРАВИЛЬНО +python ~/.server-connections/ssh.py --redis-info "redis-alias" + +# ❌ НЕПРАВИЛЬНО — MariaDB это НЕ SSH +python ~/.server-connections/ssh.py "mariadb-alias" "SHOW DATABASES" + +# ✅ ПРАВИЛЬНО +python ~/.server-connections/ssh.py --sql-databases "mariadb-alias" ``` ## Общие команды @@ -159,7 +173,12 @@ python ~/.server-connections/ssh.py --redis-info ALIAS python ~/.server-connections/ssh.py --redis-keys ALIAS "user:*" ``` -## S3-команды (тип: s3) +## S3-команды (тип: s3) — MinIO, AWS S3, любое S3-совместимое хранилище + +**MinIO = тип `s3`.** Когда пользователь говорит "MinIO" или "S3" — используй ТОЛЬКО `--s3-*` команды. +**НЕ пытайся** выполнять shell-команды (`ls`, `mkdir`, `cat`) на S3-серверах — это не SSH! + +**Папки в S3 не существуют** — это префиксы. "Создать папку" = загрузить файл с префиксом в ключе (например `bucket/folder/file.txt`). ### Список бакетов ```bash @@ -187,6 +206,25 @@ python ~/.server-connections/ssh.py --s3-download ALIAS bucket/key "D:/local/fil python ~/.server-connections/ssh.py --s3-delete ALIAS bucket/key ``` +### Получить ссылку на файл (presigned URL) +```bash +python ~/.server-connections/ssh.py --s3-url ALIAS bucket/key +python ~/.server-connections/ssh.py --s3-url ALIAS bucket/key 86400 +``` +По умолчанию ссылка действует 1 час (3600 сек). Второй аргумент — время жизни в секундах (например 86400 = 24 часа). + +### Типичный workflow: "создай папку и залей файл" +```bash +# 1. Посмотри бакеты +python ~/.server-connections/ssh.py --s3-buckets ALIAS +# 2. "Создать папку" = просто загрузить файл с нужным путём (prefix) +python ~/.server-connections/ssh.py --s3-upload ALIAS "D:/file.txt" mybucket/newfolder/file.txt +# 3. Проверить +python ~/.server-connections/ssh.py --s3-ls ALIAS mybucket/newfolder/ +# 4. Получить ссылку +python ~/.server-connections/ssh.py --s3-url ALIAS mybucket/newfolder/file.txt +``` + ## Grafana-команды (тип: grafana) ### Список дашбордов