Claude Info
Безопасность

zKettle

benderterminal/zkettle

zKettle — инструмент для безопасного обмена секретами: шифрование на стороне клиента, сервер хранит только шифротекст, ключ передаётся во фрагменте URL. Поддержка MCP, CLI, Docker и самоуничтожения после просмотра.

Установка

terminal
bash
claude mcp add -s user zkettle -- /absolute/path/to/zkettle mcp --port 3001 --tunnel

README

zKettle

Самохостинговый сервис секретов с нулевым знанием и ограниченным сроком жизни. Шифрование выполняется локально, на сервере хранится только шифротекст, URL содержит ключ дешифрования во фрагменте. Сервер никогда не видит открытый текст или ключ.

Установка

Через go install (требуется Go 1.25+)

go install github.com/benderterminal/zkettle@latest

Устанавливается в $GOPATH/bin (обычно ~/go/bin). Убедитесь, что путь добавлен в PATH: export PATH="$HOME/go/bin:$PATH"

Загрузка бинарного файла

bash
curl -fsSL https://github.com/benderterminal/zkettle/releases/latest/download/zkettle-$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') -o /usr/local/bin/zkettle && chmod +x /usr/local/bin/zkettle

Из исходного кода

bash
git clone https://github.com/benderterminal/zkettle.git && cd zkettle && make install

Через AI-агент

Вставьте этот промпт в Claude Code, Cursor или любой MCP-совместимый агент:

I want to set up zKettle — a self-hosted zero-knowledge secret sharing tool. Install it with go install github.com/benderterminal/zkettle@latest, then read the MCP setup instructions in the README at https://github.com/benderterminal/zkettle. When configuring the MCP server, use the absolute path to the installed binary (find it with which zkettle or check ~/go/bin/). Once configured, test the full workflow using the CLI: create a secret, read it back, and revoke it. Note that MCP servers are loaded at startup — the new tools won't be available until the next terminal session.

Быстрый старт

bash
# Запуск сервера с туннелем Cloudflare (мгновенный публичный URL)
zkettle serve --tunnel

# Или локальный запуск
zkettle serve --port 3000

# Создание секрета (в другом терминале)
echo "my secret password" | zkettle create --views 1 --minutes 60
# → http://localhost:3000/s/abc123#key

# Чтение секрета
zkettle read "http://localhost:3000/s/abc123#key"
# → my secret password (используйте -c для буфера обмена, -o <file> для записи в файл)

# Отзыв секрета
zkettle revoke --server http://localhost:3000 --token <delete-token> <id>

Откройте URL в браузере, чтобы просмотреть секрет через веб-интерфейс.

Развёртывание через Docker

bash
# Сборка и запуск через Docker Compose
docker compose up -d

# Или сборка и запуск вручную
docker build -t zkettle .
docker run -d -p 3000:3000 -v zkettle-data:/data zkettle

Контейнер слушает порт 3000 и хранит данные в /data. Настройка через переменные окружения (см. Справочник конфигурации).

Развёртывание в продакшене

С TLS (напрямую)

bash
zkettle serve --host 0.0.0.0 --tls-cert /path/to/cert.pem --tls-key /path/to/key.pem

С обратным прокси (рекомендуется)

Запустите zkettle за Caddy, Nginx или Traefik для автоматического TLS:

zkettle serve --host 127.0.0.1 --trust-proxy

Включите --trust-proxy, чтобы zkettle читал реальный IP клиента из заголовков X-Forwarded-For.

Systemd

Скопируйте шаблон сервиса и активируйте его:

bash
sudo cp contrib/zkettle.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now zkettle

Шаблон сервиса использует DynamicUser=yes с ReadWritePaths=/var/lib/zkettle, поэтому systemd управляет директорией данных автоматически.

Настройка через файл окружения /etc/zkettle/env:

bash
ZKETTLE_PORT=3000
ZKETTLE_HOST=0.0.0.0
ZKETTLE_ADMIN_TOKEN=your-secret-token
ZKETTLE_TRUST_PROXY=true

Резервное копирование

База данных — единственный SQLite-файл по пути <data-dir>/zkettle.db. Резервная копия:

bash
sqlite3 /var/lib/zkettle/zkettle.db ".backup /backups/zkettle-$(date +%Y%m%d).db"

Admin API

Активируйте административный эндпоинт, задав токен через переменную окружения:

bash
export ZKETTLE_ADMIN_TOKEN=my-secret-admin-token
zkettle serve

Примечание: Передача --admin-token в командной строке раскрывает токен в списке процессов (ps, /proc/*/cmdline). Предпочтительнее использовать переменную окружения или файл конфигурации.

Список активных секретов

bash
# Через CLI
zkettle list --server http://localhost:3000 --admin-token my-secret-admin-token

# Через API
curl -H "Authorization: Bearer my-secret-admin-token" http://localhost:3000/api/admin/secrets

Возвращает только метаданные (ID, оставшиеся просмотры, временны́е метки). Зашифрованное содержимое и ключи дешифрования никогда не раскрываются.

GET /api/admin/secrets

Возвращает 404, если токен администратора не настроен (эндпоинт отключён). Требует заголовок Authorization: Bearer <token>.

Ответ (200):

json
[
  {
    "id": "abc123...",
    "views_left": 2,
    "expires_at": "2024-01-02T03:04:05Z",
    "created_at": "2024-01-01T00:00:00Z"
  }
]

Метрики

Активируйте эндпоинт /metrics с флагом --metrics:

bash
export ZKETTLE_ADMIN_TOKEN=my-secret-admin-token
zkettle serve --metrics

Эндпоинт /metrics требует токен администратора (заголовок Authorization: Bearer <token>). Возвращает 404, если токен не настроен.

Возвращает JSON-метрики на GET /metrics:

json
{
  "zkettle_secrets_active": 5
}

Настройка MCP

zKettle включает MCP-сервер для использования с Claude Desktop, Claude Code или любым MCP-совместимым агентом.

Важно: Используйте абсолютный путь к бинарному файлу zkettle. Многие MCP-клиенты не наследуют PATH вашей оболочки, поэтому команда без полного пути может молча не запуститься.

Добавьте в файл конфигурации вашего MCP-клиента:

json
{
  "mcpServers": {
    "zkettle": {
      "command": "/absolute/path/to/zkettle",
      "args": ["mcp", "--port", "3001", "--tunnel"]
    }
  }
}

Используйте --tunnel для публичных URL через Cloudflare Quick Tunnel (аккаунт не требуется). Опустите флаг для локального доступа. Используйте --base-url https://your-domain.com при наличии собственного домена.

Быстрое добавление в Claude Code:

bash
claude mcp add -s user zkettle -- /absolute/path/to/zkettle mcp --port 3001 --tunnel

Docker (для верификации/индексации MCP):

bash
docker build -t zkettle-mcp .
docker run --rm -i -p 3000:3000 -v zkettle-data:/data zkettle-mcp

Контейнер по умолчанию запускает zkettle mcp --host 0.0.0.0 --port 3000 --data /data.

Похожие скиллы