Перейти к содержимому

Как настроить E2EE синхронизацию SSH ключей и серверов

Синхронизация учетных данных между рабочими станциями, домашними компьютерами и смартфонами — ключевое удобство для современного инженера. Однако доверять приватные SSH-ключи, токены и пароли сторонним закрытым облачным сервисам — серьезный риск компрометации инфраструктуры.

В этом руководстве мы разберем, как за 2 минуты запустить собственный автономный сервер синхронизации Shellit и настроить сквозное Zero-Knowledge шифрование (E2EE) между вашими устройствами.


Как устроен Zero-Knowledge E2EE в Shellit

Принцип Zero-Knowledge означает, что сервер ретрансляции никогда не видит ваши данные в расшифрованном виде:

  1. Локальное шифрование на клиенте: Все данные хранилища (IP-адреса, порты, логины, приватные ключи OpenSSH, сниппеты) шифруются на вашем компьютере с помощью современного симметричного шифра XChaCha20-Poly1305 или AES-256-GCM.
  2. Криптографическая деривация ключа: Ключ шифрования вычисляется из вашего Мастер-пароля с использованием функции Argon2id (64 МБ памяти, 3 итерации). Мастер-пароль никогда не передается по сети и не покидает память устройства.
  3. Слепой релей (Blind Relay): Сервер синхронизации принимает только зашифрованные бинарные блобы (ciphertext + nonce + tag) и сохраняет их в компактную базу SQLite. Даже если сервер будет скомпрометирован злоумышленником, он получит лишь нечитаемый шум.

Шаг 1. Развертывание сервера синхронизации в Docker

Для запуска собственного сервера ретрансляции потребуется любой Linux-сервер или VPS с установленным Docker Compose.

Создайте рабочий каталог и файл docker-compose.yml:

Окно терминала
mkdir -p ~/shellit-sync && cd ~/shellit-sync
nano 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

  1. Откройте Shellit на компьютере (Windows или Linux).
  2. Перейдите в Настройки → Синхронизация (Sync).
  3. В поле Режим провайдера выберите Self-Hosted Server.
  4. Введите URL вашего сервера: https://sync.example.com (или http://192.168.1.50:8080 при работе в локальной сети).
  5. Введите Registration Token, указанный в docker-compose.yml.
  6. Нажмите «Проверить подключение и зарегистрировать устройство».
  7. Введите ваш Мастер-пароль хранилища.

Клиент сгенерирует начальный снапшот зашифрованной базы данных и отправит его на сервер.

Локальное хранилище ключей Keychain Vault в Shellit


Шаг 4. Подключение мобильного устройства (Android)

  1. Установите приложение Shellit на телефон.
  2. При первом запуске выберите «Присоединиться к существующему хранилищу».
  3. Укажите адрес сервера https://sync.example.com и токен регистрации.
  4. Введите тот же самый Мастер-пароль, который был задан на компьютере.
  5. Нажмите «Синхронизировать».

За доли секунды зашифрованный блоб будет скачан, проверен на целостность MAC-тегом и расшифрован локально. Все ваши серверы, SSH-ключи, группы и сниппеты мгновенно появятся на телефоне!


Мгновенная рассылка изменений через WebSockets

Сервер синхронизации поддерживает постоянные WebSocket соединения:

  • Как только вы добавляете новый сервер на ноутбуке, событие sync:revision_pushed мгновенно уведомляет ваш телефон.
  • Фоновое обновление происходит в течение 100–300 мс без необходимости ручного нажатия кнопки «Обновить».