Заменить шаблонную документацию на описание SSH Remote Sync и зафиксировать первый стабильный релиз. Co-authored-by: Cursor <cursoragent@cursor.com>
116 lines
6.8 KiB
Markdown
116 lines
6.8 KiB
Markdown
# 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).
|