Skerry

Установка и первый запуск

Четыре платформы, одно ядро. Выберите пакет, задайте пароль хранилища, подключайтесь. Сервер синхронизации — по желанию и в последнюю очередь.

Установка

Все пакеты лежат на странице релизов. При установке никуда ничего не отправляется.

  1. Linux — AppImage, запускается без установки

    shell
    chmod +x Skerry-*.AppImage
    ./Skerry-*.AppImage

    Нужен FUSE. Без него запускайте с --appimage-extract-and-run.

  2. Linux — Debian, Ubuntu

    shell
    sudo apt install ./skerry_*_amd64.deb
  3. Linux — Fedora, RHEL

    shell
    sudo dnf install ./skerry-*.x86_64.rpm
  4. Windows — установщик .msi

    Сборка не подписана: SmartScreen покажет «Система Windows защитила ваш компьютер» → «Подробнее» → «Выполнить в любом случае». Портативный .zip установщика не требует.

  5. macOS — .dmg для Apple Silicon или Intel

    Без подписи и нотаризации: при первом запуске правый клик по приложению → «Открыть». В «Свойствах» видна версия 1.x.y — упаковка macOS требует мажорной ≥ 1, реальная версия на экране «О программе».

  6. Android — подписанный .apk, установка вручную

    Android 8.0 и новее, arm64-v8a. Разрешите установку из браузера или файлового менеджера, когда система спросит.

Проверка загрузки

В каждом релизе рядом с пакетами лежит SHA256SUMS.txt.

  1. Сверьте скачанный файл

    shell
    sha256sum -c --ignore-missing SHA256SUMS.txt

    В Windows: certutil -hashfile Skerry-x.y.z.msi SHA256 и сравнить глазами.

Первый запуск

  1. Задайте мастер-пароль

    Им шифруется локальное хранилище. Пароль остаётся на устройстве и не восстанавливается — забыли, и данные не расшифровать. На Android потом можно включить разблокировку по биометрии: «Ещё» → «Безопасность».

  2. Добавьте хост — «Новое подключение»

    Адрес, порт, пользователь, затем ключ или пароль. Учётные данные уходят в хранилище, а не в конфиг-файл.

  3. Или перенесите то, что уже есть

    «Новое подключение» → «Импорт из ssh_config» читает ~/.ssh/config и показывает список хостов на выбор. Ключи не импортируются — способ аутентификации задаётся при подключении.

  4. Пометьте боевые хосты тегом

    На хосте с тегом prod каждая команда проходит оценку риска, а разрушающая останавливается до подтверждения.

Свой сервер синхронизации

По желанию. Без него приложение работает полностью — сервер нужен только чтобы держать одно хранилище на нескольких устройствах. Облака вендора нет.

  1. Поднимите контейнер

    shell
    docker run -d --name skerry-sync -p 8080:8080 \
      -e SKERRY_JWT_SECRET="$(openssl rand -base64 48)" \
      -e SKERRY_ADMIN_TOKEN="$(openssl rand -hex 16)" \
      -v skerry-data:/data \
      secherkasov/skerry-sync:latest

    SQLite в именованном томе, без настройки. SKERRY_JWT_SECRET сохраните: смена секрета разлогинивает всех.

  2. Укажите его в приложении

    Настройки → Синхронизация → SERVER URL, дальше регистрация или вход. Сервер проверяет пароль по SRP-6a и самого пароля не получает.

  3. Привяжите второе устройство

    На устройстве, где вход уже выполнен: Настройки → Синхронизация → «Привязать устройство», затем отсканируйте QR со второго.

  4. У сервера есть веб-консоль

    Публичная страница на /, личный кабинет на /account, панель оператора на /console — всё отдаёт тот же контейнер, без обращений наружу.

  5. PostgreSQL вместо SQLite

    Раскомментируйте сервис db и переменные postgres в docker-compose.yml. Полное руководство по развёртыванию — TLS, бэкапы, API — в server/README.md.

Сборка из исходников

Нужен JDK 21; резолвер тулчейнов Gradle скачает его, если в системе нет. Пакеты собираются под ОС и архитектуру той машины, на которой идёт сборка.

  1. Клонировать репозиторий

    shell
    git clone https://github.com/SeCherkasov/SkerrySSH.git
    cd SkerrySSH
  2. Запуск десктопного приложения

    shell
    ./gradlew :composeApp:run
  3. Упаковка

    shell
    ./gradlew :composeApp:packageDistributionForCurrentOS   # .deb / .rpm / .msi / .dmg
    ./gradlew :composeApp:packageAppImage                  # портативный .AppImage
  4. Android

    shell
    ANDROID_HOME=$HOME/Android/Sdk ./gradlew :androidApp:installDebug
  5. Только сервер, без Android SDK

    shell
    ./gradlew :server:run -PserverOnly

Скачать