- Remote paths in upload/download require // prefix on Windows/Git Bash - Removed useless MSYS_NO_PATHCONV from Python (must be shell-level) - Removed broken bash wrapper - Updated skill docs with // path rule and examples Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# Скилл /ssh — управление удалёнными серверами
|
||
|
||
Ты управляешь удалёнными серверами через SSH-утилиту.
|
||
|
||
## ВАЖНО — Безопасность
|
||
|
||
- **НИКОГДА не читай файлы** в директории `~/.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"
|
||
```
|
||
Пример: `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
|
||
```
|
||
|
||
### Обновить заметки сервера
|
||
```bash
|
||
python ~/.server-connections/ssh.py --set-note ALIAS "описание сервера"
|
||
```
|
||
Используй чтобы сохранить контекст: что на сервере работает, для чего он нужен.
|
||
|
||
### Удалить сервер
|
||
```bash
|
||
python ~/.server-connections/ssh.py --remove ALIAS
|
||
```
|
||
**Спроси подтверждение у пользователя перед удалением!**
|
||
|
||
## Альтернативный способ (только если SSH-ключ установлен)
|
||
```bash
|
||
unset SSH_ASKPASS && unset DISPLAY && ssh ALIAS "command"
|
||
```
|
||
|
||
## Поведение
|
||
|
||
- **Auto-sudo**: если user на сервере не root — команды автоматически оборачиваются в `sudo -S`, пароль подаётся через stdin. Тебе НЕ нужно добавлять `sudo` в команду
|
||
- **--no-sudo**: если команда не требует root (например `ls`, `cat`), используй `--no-sudo` для скорости
|
||
- **Timeout**: 120 секунд на команду, 15 секунд на подключение
|
||
- **SSH-ключ**: пробуется первым, fallback на пароль если ключ не подходит
|
||
|
||
## Правила
|
||
|
||
- Отвечай на русском языке
|
||
- Показывай результат каждой операции
|
||
- При ошибках — объясняй причину и предлагай решение
|
||
- Если timeout — предложи проверить VPN/firewall/панель хостера
|
||
- Файлы создаваемые на сервере должны иметь права 664 (owner+group rw)
|
||
- При вопросе о серверах — СНАЧАЛА `--list`, потом `--info ALIAS` если нужны детали
|