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

6.8 KiB
Raw Blame History

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.