SSHRemotePlugin/README.md
stud_i_sram 8e53844818 Добавить README и CHANGELOG, выпустить версию 1.0.0
Заменить шаблонную документацию на описание SSH Remote Sync и зафиксировать первый стабильный релиз.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-18 11:05:57 +03:00

116 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SSH Remote Sync
Плагин для IntelliJ IDEA, который позволяет работать с кодом на удалённых серверах так же удобно, как с локальным проектом. Файлы синхронизируются по SFTP, изменения отправляются на сервер при сохранении, а переключение между виртуальными машинами занимает несколько кликов.
## Возможности
- **Менеджер серверов** — добавление нескольких ВМ с хостом, портом, пользователем и путём к проекту. Пароли хранятся в системном хранилище IDE (`PasswordSafe`).
- **Открытие удалённого проекта** — при первом подключении плагин скачивает проект с сервера в локальную папку и открывает его в IDE.
- **Автосинхронизация** — при сохранении файла (`Ctrl+S`) изменения автоматически отправляются на сервер. Создание и удаление файлов тоже синхронизируется.
- **Обновление с сервера** — команда Refresh подтягивает изменения с удалённой машины, в том числе сделанные вне IDE.
- **Выполнение команд** — запуск произвольной команды на привязанном сервере через SSH `exec`.
- **Удалённый терминал** — встроенный терминал IDE, подключённый к серверу по SSH, с автоматическим переходом в папку проекта.
- **Переключение между серверами** — быстрое переключение между проектами разных ВМ без ручного поиска файлов.
## Требования
- IntelliJ IDEA Community Edition **2024.1.7** или новее
- JDK **21**
- SSH-доступ к удалённому серверу (аутентификация по паролю)
- Bundled-плагин **Terminal** (включён в зависимости по умолчанию)
## Быстрый старт
### 1. Добавьте сервер
Откройте **File → Settings → SSH Remote Project** и нажмите **+** (Add).
Заполните поля:
| Поле | Описание |
|------|----------|
| Name | Произвольное имя сервера |
| Host | IP-адрес или hostname |
| Port | SSH-порт (по умолчанию 22) |
| User | Имя пользователя |
| Password | Пароль (сохраняется в защищённом хранилище IDE) |
| Remote Path | Абсолютный путь к проекту на сервере, например `/home/user/myproject` |
### 2. Откройте удалённый проект
Выберите **Tools → SSH Remote Manager → Switch Remote Server** и укажите нужный сервер.
Плагин скачает проект (если локальной копии ещё нет) и откроет его в IDE.
### 3. Работайте как с локальным проектом
- Редактируйте файлы — при сохранении они автоматически уйдут на сервер.
- Чтобы подтянуть изменения с сервера: **Tools → SSH Remote Manager → Refresh from Server**.
- Чтобы открыть SSH-терминал: **Tools → SSH Remote Manager → Open Remote Terminal**.
## Локальное хранение проектов
Каждый удалённый проект кэшируется локально по пути:
```
~/ssh-remote-projects/<host>/<server-name>/
```
При повторном открытии того же сервера плагин использует уже скачанную копию и синхронизирует только изменённые файлы.
Служебные файлы IDE (`.idea/`, `remote.iml`) не синхронизируются с сервером.
## Меню плагина
Все действия доступны в **Tools → SSH Remote Manager**:
| Действие | Описание |
|----------|----------|
| Configure SSH Servers | Открыть настройки серверов |
| Switch Remote Server | Переключиться на другой сервер / открыть его проект |
| Refresh from Server | Загрузить изменения с сервера |
| Run Remote Command | Выполнить команду на сервере |
| Open Remote Terminal | Открыть SSH-терминал в папке проекта |
## Сборка и запуск из исходников
```bash
./gradlew runIde
```
Для сборки дистрибутива:
```bash
./gradlew buildPlugin
```
Готовый архив появится в `build/distributions/`.
## Структура проекта
```
src/main/java/com/example/plugin/
├── SshServer.java # Модель сервера
├── SshServerManager.java # Хранение серверов и паролей
├── ProjectServerMapping.java # Связь локального проекта с сервером
├── SftpSessionManager.java # SSH/SFTP-сессии
├── SshSyncStartupActivity.java # Автосинхронизация при старте и сохранении
├── ConnectToRemoteAction.java # Скачивание и открытие проекта
├── SwitchServerAction.java # Переключение серверов
├── RefreshFromServerAction.java
├── RemoteCommandAction.java
├── OpenRemoteTerminalAction.java
├── SshTtyConnector.java # Мост SSH → встроенный терминал
└── SshServerConfigurable.java # UI настроек
```
## Ограничения
- Поддерживается только аутентификация по паролю (ключи SSH пока не поддерживаются).
- Проверка host key отключена (`StrictHostKeyChecking=no`) — удобно для dev-сред, но не рекомендуется для production без дополнительных мер.
- Синхронизация файловая, без разрешения конфликтов: при Refresh перезаписываются файлы, которые отличаются от серверных по размеру или времени модификации.
## Лицензия
См. файл [LICENSE](LICENSE).