Установка и первый запуск
Четыре платформы, одно ядро. Выберите пакет, задайте пароль хранилища, подключайтесь. Сервер синхронизации — по желанию и в последнюю очередь.
Установка
Все пакеты лежат на странице релизов. При установке никуда ничего не отправляется.
Linux — AppImage, запускается без установки
chmod +x Skerry-*.AppImage ./Skerry-*.AppImageНужен FUSE. Без него запускайте с --appimage-extract-and-run.
Linux — Debian, Ubuntu
sudo apt install ./skerry_*_amd64.debLinux — Fedora, RHEL
sudo dnf install ./skerry-*.x86_64.rpmWindows — установщик .msi
Сборка не подписана: SmartScreen покажет «Система Windows защитила ваш компьютер» → «Подробнее» → «Выполнить в любом случае». Портативный .zip установщика не требует.
macOS — .dmg для Apple Silicon или Intel
Без подписи и нотаризации: при первом запуске правый клик по приложению → «Открыть». В «Свойствах» видна версия 1.x.y — упаковка macOS требует мажорной ≥ 1, реальная версия на экране «О программе».
Android — подписанный .apk, установка вручную
Android 8.0 и новее, arm64-v8a. Разрешите установку из браузера или файлового менеджера, когда система спросит.
Проверка загрузки
В каждом релизе рядом с пакетами лежит SHA256SUMS.txt.
Сверьте скачанный файл
sha256sum -c --ignore-missing SHA256SUMS.txtВ Windows: certutil -hashfile Skerry-x.y.z.msi SHA256 и сравнить глазами.
Первый запуск
Задайте мастер-пароль
Им шифруется локальное хранилище. Пароль остаётся на устройстве и не восстанавливается — забыли, и данные не расшифровать. На Android потом можно включить разблокировку по биометрии: «Ещё» → «Безопасность».
Добавьте хост — «Новое подключение»
Адрес, порт, пользователь, затем ключ или пароль. Учётные данные уходят в хранилище, а не в конфиг-файл.
Или перенесите то, что уже есть
«Новое подключение» → «Импорт из ssh_config» читает ~/.ssh/config и показывает список хостов на выбор. Ключи не импортируются — способ аутентификации задаётся при подключении.
Пометьте боевые хосты тегом
На хосте с тегом prod каждая команда проходит оценку риска, а разрушающая останавливается до подтверждения.
Свой сервер синхронизации
По желанию. Без него приложение работает полностью — сервер нужен только чтобы держать одно хранилище на нескольких устройствах. Облака вендора нет.
Поднимите контейнер
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:latestSQLite в именованном томе, без настройки. SKERRY_JWT_SECRET сохраните: смена секрета разлогинивает всех.
Укажите его в приложении
Настройки → Синхронизация → SERVER URL, дальше регистрация или вход. Сервер проверяет пароль по SRP-6a и самого пароля не получает.
Привяжите второе устройство
На устройстве, где вход уже выполнен: Настройки → Синхронизация → «Привязать устройство», затем отсканируйте QR со второго.
У сервера есть веб-консоль
Публичная страница на /, личный кабинет на /account, панель оператора на /console — всё отдаёт тот же контейнер, без обращений наружу.
PostgreSQL вместо SQLite
Раскомментируйте сервис db и переменные postgres в docker-compose.yml. Полное руководство по развёртыванию — TLS, бэкапы, API — в server/README.md.
Сборка из исходников
Нужен JDK 21; резолвер тулчейнов Gradle скачает его, если в системе нет. Пакеты собираются под ОС и архитектуру той машины, на которой идёт сборка.
Клонировать репозиторий
git clone https://github.com/SeCherkasov/SkerrySSH.git cd SkerrySSHЗапуск десктопного приложения
./gradlew :composeApp:runУпаковка
./gradlew :composeApp:packageDistributionForCurrentOS # .deb / .rpm / .msi / .dmg ./gradlew :composeApp:packageAppImage # портативный .AppImageAndroid
ANDROID_HOME=$HOME/Android/Sdk ./gradlew :androidApp:installDebugТолько сервер, без Android SDK
./gradlew :server:run -PserverOnly