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 <noreply@anthropic.com>
This commit is contained in:
chrome-storm-c442
2026-02-24 07:43:15 -05:00
parent 7d29f8446a
commit 2d1d942ddc
4 changed files with 106 additions and 26 deletions

View File

@@ -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 # Удалить сервер (спросит подтверждение)
```
## Версионирование

View File

@@ -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`
### 使用方法

View File

@@ -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` если нужны детали
"""

View File

@@ -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, итог с размером/временем/скоростью
## Правила