Заменить шаблонную документацию на описание SSH Remote Sync и зафиксировать первый стабильный релиз. Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|---|---|---|
| .run | ||
| gradle/wrapper | ||
| src | ||
| .gitignore | ||
| build.gradle.kts | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
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-терминал в папке проекта |
Сборка и запуск из исходников
./gradlew runIde
Для сборки дистрибутива:
./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.