From 2d1d942ddc5da14f13b304168757f11db0542220 Mon Sep 17 00:00:00 2001 From: chrome-storm-c442 Date: Tue, 24 Feb 2026 07:43:15 -0500 Subject: [PATCH] docs: fix skill syntax, update fallback generator, add progress docs - Fix --info/--set-note syntax in CLAUDE.md (global flags, not per-alias) - Add --remove, --install-key to CLAUDE.md examples - Replace minimal fallback skill generator with full version (security rules, all commands, progress, SFTP double-slash) - Add upload/download progress reporting to skill-ssh.md and README - Fix outdated v1.5.4 version in README build examples Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 12 +++-- README.md | 8 ++-- core/claude_setup.py | 111 ++++++++++++++++++++++++++++++++++++------- tools/skill-ssh.md | 1 + 4 files changed, 106 insertions(+), 26 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0318955..ab7d859 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -56,13 +56,15 @@ pip install -r requirements.txt /ssh main-ovh "systemctl status nginx" # Команда на другом сервере /ssh --list # Список серверов (без паролей) + колонка Notes /ssh --status # Статус всех серверов -/ssh investor --upload /local/file /remote/ # Загрузить файл -/ssh investor --download /remote/file /local/ # Скачать файл +/ssh investor --upload /local/file /remote/ # Загрузить файл (прогресс >=1MB) +/ssh investor --download /remote/file /local/ # Скачать файл (прогресс >=1MB) /ssh investor --ping # Проверить доступность -/ssh investor --info # Безопасная информация о сервере (без creds) -/ssh investor --set-note "описание сервера" # Обновить заметки сервера -/ssh tor --info # Поиск по ключевому слову (fuzzy search) +/ssh --info investor # Безопасная информация о сервере (без creds) +/ssh --set-note investor "описание сервера" # Обновить заметки сервера +/ssh --info tor # Поиск по ключевому слову (fuzzy search) /ssh investor --no-sudo "whoami" # Выполнить без sudo +/ssh investor --install-key # Установить SSH-ключ на сервер +/ssh --remove investor # Удалить сервер (спросит подтверждение) ``` ## Версионирование diff --git a/README.md b/README.md index ae78197..bf68617 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ pip install pyinstaller python build.py ``` -Output goes to `releases/ServerManager-v1.5.4-{platform}.exe` +Output goes to `releases/ServerManager-vX.Y.Z-{platform}.exe` ### Usage @@ -88,6 +88,7 @@ ServerManager GUI ←→ ~/.server-connections/servers.json ←→ ssh.py (C - Fuzzy alias search: search by keyword (e.g., "tor" finds "API TOR contabo..."), word-boundary priority - SFTP path fix: remote path normalization for Windows/Git Bash with double slash // - `--no-sudo` flag for commands that don't need elevation +- Upload/download progress: files >=1MB show 25/50/75% milestones with size, time, and speed **Setup on a new machine:** 1. Install ServerManager (clone repo or download binary) @@ -231,7 +232,7 @@ pip install pyinstaller python build.py ``` -Результат в `releases/ServerManager-v1.5.4-{платформа}.exe` +Результат в `releases/ServerManager-vX.Y.Z-{платформа}.exe` ### Использование @@ -266,6 +267,7 @@ ServerManager GUI ←→ ~/.server-connections/servers.json ←→ ssh.py (C - Нечеткий поиск по алиасу: поиск по ключевому слову (например, "tor" находит "API TOR contabo..."), приоритет границ слова - Исправление пути SFTP: нормализация удаленного пути для Windows/Git Bash с двойным слешем // - Флаг `--no-sudo` для команд, не требующих повышения привилегий +- Прогресс upload/download: файлы >=1MB показывают 25/50/75% с размером, временем и скоростью **Настройка на новой машине:** 1. Установить ServerManager (клонировать репо или скачать бинарник) @@ -379,7 +381,7 @@ pip install pyinstaller python build.py ``` -输出至 `releases/ServerManager-v1.5.4-{平台}.exe` +输出至 `releases/ServerManager-vX.Y.Z-{平台}.exe` ### 使用方法 diff --git a/core/claude_setup.py b/core/claude_setup.py index 5f86952..781bdd7 100644 --- a/core/claude_setup.py +++ b/core/claude_setup.py @@ -136,25 +136,100 @@ def install_all() -> list[str]: def _generate_skill_content() -> str: - """Generate /ssh skill markdown.""" - ssh_py_path = os.path.join(SHARED_DIR, "ssh.py").replace("\\", "/") - return f"""SSH skill for Claude Code. + """Generate /ssh skill markdown (fallback if skill-ssh.md not found).""" + return """# Скилл /ssh — управление удалёнными серверами -RULES: -- NEVER read servers.json directly -- ONLY use ssh.py for all server operations -- Maximum 1 connection attempt per command -- If connection fails — report error, do NOT retry automatically +Ты управляешь удалёнными серверами через SSH-утилиту. -Usage: - python "{ssh_py_path}" ALIAS "command" - python "{ssh_py_path}" ALIAS --no-sudo "command" - python "{ssh_py_path}" ALIAS --upload LOCAL REMOTE - python "{ssh_py_path}" ALIAS --download REMOTE LOCAL - python "{ssh_py_path}" ALIAS --install-key - python "{ssh_py_path}" ALIAS --ping - python "{ssh_py_path}" --list - python "{ssh_py_path}" --status +## ВАЖНО — Безопасность -The user's arguments: $ARGUMENTS +- **НИКОГДА не читай файлы** в директории `~/.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 ALIAS "command" +``` + +### Выполнить команду БЕЗ sudo +```bash +python ~/.server-connections/ssh.py ALIAS --no-sudo "command" +``` + +### Загрузить файл на сервер +```bash +python ~/.server-connections/ssh.py ALIAS --upload "local/file" //remote/path/file +``` +**ВАЖНО (Windows/Git Bash):** remote path ОБЯЗАТЕЛЬНО с двойным слешем `//home/...`, `//tmp/...`. + +### Скачать файл с сервера +```bash +python ~/.server-connections/ssh.py ALIAS --download //remote/path/file "local/file" +``` + +### Установить SSH-ключ на сервер +```bash +python ~/.server-connections/ssh.py ALIAS --install-key +``` + +### Проверить доступность сервера +```bash +python ~/.server-connections/ssh.py ALIAS --ping +``` + +### Обновить заметки сервера +```bash +python ~/.server-connections/ssh.py --set-note ALIAS "описание сервера" +``` + +### Удалить сервер +```bash +python ~/.server-connections/ssh.py --remove ALIAS +``` +**Спроси подтверждение у пользователя перед удалением!** + +## Поведение + +- **Auto-sudo**: если user не root — команды автоматически оборачиваются в `sudo -S` +- **--no-sudo**: для команд без root (например `ls`, `cat`) +- **Timeout**: 120 секунд на команду, 15 секунд на подключение +- **SSH-ключ**: пробуется первым, fallback на пароль +- **Прогресс**: файлы >=1MB показывают 25/50/75%, итог с размером/временем/скоростью + +## Правила + +- Отвечай на русском языке +- Показывай результат каждой операции +- При ошибках — объясняй причину и предлагай решение +- Если timeout — предложи проверить VPN/firewall/панель хостера +- Файлы создаваемые на сервере должны иметь права 664 (owner+group rw) +- При вопросе о серверах — СНАЧАЛА `--list`, потом `--info ALIAS` если нужны детали """ diff --git a/tools/skill-ssh.md b/tools/skill-ssh.md index 0656589..7e67639 100644 --- a/tools/skill-ssh.md +++ b/tools/skill-ssh.md @@ -91,6 +91,7 @@ unset SSH_ASKPASS && unset DISPLAY && ssh ALIAS "command" - **--no-sudo**: если команда не требует root (например `ls`, `cat`), используй `--no-sudo` для скорости - **Timeout**: 120 секунд на команду, 15 секунд на подключение - **SSH-ключ**: пробуется первым, fallback на пароль если ключ не подходит +- **Прогресс**: upload/download файлов >=1MB показывают 25/50/75% milestone, итог с размером/временем/скоростью ## Правила