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:
@@ -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` если нужны детали
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user