zKettle
benderterminal/zkettlezKettle — инструмент для безопасного обмена секретами: шифрование на стороне клиента, сервер хранит только шифротекст, ключ передаётся во фрагменте URL. Поддержка MCP, CLI, Docker и самоуничтожения после просмотра.
Установка
claude mcp add -s user zkettle -- /absolute/path/to/zkettle mcp --port 3001 --tunnelREADME
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"
Загрузка бинарного файла
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Из исходного кода
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.
Быстрый старт
# Запуск сервера с туннелем 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
# Сборка и запуск через Docker Compose
docker compose up -d
# Или сборка и запуск вручную
docker build -t zkettle .
docker run -d -p 3000:3000 -v zkettle-data:/data zkettleКонтейнер слушает порт 3000 и хранит данные в /data. Настройка через переменные окружения (см. Справочник конфигурации).
Развёртывание в продакшене
С TLS (напрямую)
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
Скопируйте шаблон сервиса и активируйте его:
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:
ZKETTLE_PORT=3000
ZKETTLE_HOST=0.0.0.0
ZKETTLE_ADMIN_TOKEN=your-secret-token
ZKETTLE_TRUST_PROXY=trueРезервное копирование
База данных — единственный SQLite-файл по пути <data-dir>/zkettle.db. Резервная копия:
sqlite3 /var/lib/zkettle/zkettle.db ".backup /backups/zkettle-$(date +%Y%m%d).db"Admin API
Активируйте административный эндпоинт, задав токен через переменную окружения:
export ZKETTLE_ADMIN_TOKEN=my-secret-admin-token
zkettle serveПримечание: Передача
--admin-tokenв командной строке раскрывает токен в списке процессов (ps,/proc/*/cmdline). Предпочтительнее использовать переменную окружения или файл конфигурации.
Список активных секретов
# Через 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):
[
{
"id": "abc123...",
"views_left": 2,
"expires_at": "2024-01-02T03:04:05Z",
"created_at": "2024-01-01T00:00:00Z"
}
]Метрики
Активируйте эндпоинт /metrics с флагом --metrics:
export ZKETTLE_ADMIN_TOKEN=my-secret-admin-token
zkettle serve --metricsЭндпоинт /metrics требует токен администратора (заголовок Authorization: Bearer <token>). Возвращает 404, если токен не настроен.
Возвращает JSON-метрики на GET /metrics:
{
"zkettle_secrets_active": 5
}Настройка MCP
zKettle включает MCP-сервер для использования с Claude Desktop, Claude Code или любым MCP-совместимым агентом.
Важно: Используйте абсолютный путь к бинарному файлу
zkettle. Многие MCP-клиенты не наследуют PATH вашей оболочки, поэтому команда без полного пути может молча не запуститься.
Добавьте в файл конфигурации вашего MCP-клиента:
{
"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:
claude mcp add -s user zkettle -- /absolute/path/to/zkettle mcp --port 3001 --tunnelDocker (для верификации/индексации MCP):
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.