Как настроить E2EE синхронизацию SSH ключей и серверов
Синхронизация учетных данных между рабочими станциями, домашними компьютерами и смартфонами — ключевое удобство для современного инженера. Однако доверять приватные SSH-ключи, токены и пароли сторонним закрытым облачным сервисам — серьезный риск компрометации инфраструктуры.
В этом руководстве мы разберем, как за 2 минуты запустить собственный автономный сервер синхронизации Shellit и настроить сквозное Zero-Knowledge шифрование (E2EE) между вашими устройствами.
Как устроен Zero-Knowledge E2EE в Shellit
Принцип Zero-Knowledge означает, что сервер ретрансляции никогда не видит ваши данные в расшифрованном виде:
- Локальное шифрование на клиенте: Все данные хранилища (IP-адреса, порты, логины, приватные ключи OpenSSH, сниппеты) шифруются на вашем компьютере с помощью современного симметричного шифра
XChaCha20-Poly1305илиAES-256-GCM. - Криптографическая деривация ключа: Ключ шифрования вычисляется из вашего Мастер-пароля с использованием функции
Argon2id(64 МБ памяти, 3 итерации). Мастер-пароль никогда не передается по сети и не покидает память устройства. - Слепой релей (Blind Relay): Сервер синхронизации принимает только зашифрованные бинарные блобы (
ciphertext + nonce + tag) и сохраняет их в компактную базу SQLite. Даже если сервер будет скомпрометирован злоумышленником, он получит лишь нечитаемый шум.
Шаг 1. Развертывание сервера синхронизации в Docker
Для запуска собственного сервера ретрансляции потребуется любой Linux-сервер или VPS с установленным Docker Compose.
Создайте рабочий каталог и файл docker-compose.yml:
mkdir -p ~/shellit-sync && cd ~/shellit-syncnano docker-compose.ymlВставьте следующую минимальную конфигурацию:
version: '3.8'
services: shellit-sync: image: ghcr.io/shellit/sync-server:latest container_name: shellit-sync restart: unless-stopped ports: - "8080:8080" volumes: - ./data:/data environment: - PORT=8080 - DATA_PATH=/data/shellit-sync.db - REGISTRATION_TOKEN=your-random-strong-secret-token-here - MAX_PAYLOAD_MB=50Запустите сервис в фоновом режиме:
docker compose up -dСервер потребляет всего 15–25 МБ RAM и готов к обслуживанию запросов по протоколам HTTP/WebSocket.
Шаг 2. Защита SSL/TLS через Reverse Proxy
Для безопасности передачи данных зашифрованного канала рекомендуется использовать Nginx или Caddy с бесплатным сертификатом Let’s Encrypt:
server { server_name sync.example.com;
location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 86400s; proxy_send_timeout 86400s; }}Шаг 3. Подключение десктопного клиента Shellit
- Откройте Shellit на компьютере (Windows или Linux).
- Перейдите в Настройки → Синхронизация (Sync).
- В поле Режим провайдера выберите Self-Hosted Server.
- Введите URL вашего сервера:
https://sync.example.com(илиhttp://192.168.1.50:8080при работе в локальной сети). - Введите Registration Token, указанный в
docker-compose.yml. - Нажмите «Проверить подключение и зарегистрировать устройство».
- Введите ваш Мастер-пароль хранилища.
Клиент сгенерирует начальный снапшот зашифрованной базы данных и отправит его на сервер.

Шаг 4. Подключение мобильного устройства (Android)
- Установите приложение Shellit на телефон.
- При первом запуске выберите «Присоединиться к существующему хранилищу».
- Укажите адрес сервера
https://sync.example.comи токен регистрации. - Введите тот же самый Мастер-пароль, который был задан на компьютере.
- Нажмите «Синхронизировать».
За доли секунды зашифрованный блоб будет скачан, проверен на целостность MAC-тегом и расшифрован локально. Все ваши серверы, SSH-ключи, группы и сниппеты мгновенно появятся на телефоне!
Мгновенная рассылка изменений через WebSockets
Сервер синхронизации поддерживает постоянные WebSocket соединения:
- Как только вы добавляете новый сервер на ноутбуке, событие
sync:revision_pushedмгновенно уведомляет ваш телефон. - Фоновое обновление происходит в течение 100–300 мс без необходимости ручного нажатия кнопки «Обновить».