Документация CLI LockBox
CLI LockBox — это англоязычная автоматизированная версия для скриптового шифрования, извлечения, активации, плановых зашифрованных резервных копий и рабочих процессов CI/CD. Она использует ту же модель лицензирования, привязанную к устройству, что и настольное приложение.
Быстрый старт
Поместите LockBox.Cli.exe в папку, включённую в PATH,
или вызовите его по полному пути. Маркер --cli принимается для совместимости,
но не требуется в сборке только для CLI.
.\LockBox.Cli.exe --help
.\LockBox.Cli.exe device-id
.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen --count 3
Минимальный рабочий процесс создания и открытия:
$env:LBX_MASTER = "use-a-long-master-password"
$env:LBX_L1 = "layer-1-key"
.\LockBox.Cli.exe create `
--source "D:\Data" `
--output "E:\Backups\data.lbx" `
--master-env LBX_MASTER `
--layer-env AES-128-GCM=LBX_L1
.\LockBox.Cli.exe open `
--container "E:\Backups\data.lbx" `
--output "D:\Restore" `
--master-env LBX_MASTER `
--key-env LBX_L1
Linux использует те же команды с путями через слэш и бинарный файл без суффикса .exe:
chmod +x ./LockBox.Cli
./LockBox.Cli --help
./LockBox.Cli device-id
./LockBox.Cli create \
--source "/srv/data" \
--output "/backup/data.lbx" \
--master-env LBX_MASTER \
--layer-env AES-128-GCM=LBX_L1Установка и проверка CLI
Распакуйте ZIP для своей ОС и архитектуры процессора. Исполняемый файл уже содержит .NET. Сравните хеш пакета с SHA256SUMS.txt. В дальнейших примерах CLI должен находиться по абсолютному пути из следующего раздела; проверьте справку и лицензию под учётной записью, которая будет выполнять резервное копирование.
В Linux также нужны системные зависимости дистрибутива, включая ICU и OpenSSL: встроенный .NET их не заменяет. В Windows запуск PowerShell-скриптов должен быть разрешён действующей политикой выполнения.
.NET / Linux · PowerShell / ExecutionPolicy
Expand-Archive -LiteralPath '.\LockBox-Cli-win-x64.zip' -DestinationPath 'C:\Tools\LockBox'
& 'C:\Tools\LockBox\LockBox.Cli.exe' --help
& 'C:\Tools\LockBox\LockBox.Cli.exe' license
Get-FileHash -LiteralPath '.\LockBox-Cli-win-x64.zip' -Algorithm SHA256uname -m
unzip LockBox-Cli-linux-x64.zip -d ./lockbox-cli
chmod +x ./lockbox-cli/LockBox.Cli
./lockbox-cli/LockBox.Cli --help
./lockbox-cli/LockBox.Cli license
sha256sum LockBox-Cli-linux-x64.zipWindows x64 -> LockBox-Cli-win-x64.zip
Windows x86 -> LockBox-Cli-win-x86.zip
Windows ARM64 -> LockBox-Cli-win-arm64.zip
Linux x86_64 -> LockBox-Cli-linux-x64.zip
Linux aarch64 -> LockBox-Cli-linux-arm64.zip
Linux armv7l -> LockBox-Cli-linux-arm.zipПапки, пути и место на диске
Замените пути в примерах своими. Источник должен быть непустой папкой, а контейнер — находиться за её пределами. Повторное использование имени заменяет прежний контейнер и его части. Оставьте место для временных файлов рядом с контейнером, а для плановых задач — ещё и для копии источника. Единицы размера кратны 1024; заполнение добавляет байты, а не задаёт итоговый размер.
C:\Tools\LockBox\LockBox.Cli.exe /opt/lockbox/LockBox.Cli
C:\LockBox\secrets\master.txt /srv/lockbox/secrets/master.txt
C:\LockBox\secrets\layer1.txt /srv/lockbox/secrets/layer1.txt
C:\LockBox\backup.ps1 /srv/lockbox/backup.sh
D:\Data\report.csv /srv/data/report.csv
E:\Backups\20260910-020000\data.lbx /backup/20260910-020000/data.lbx
D:\Restore\Data\report.csv /restore/data/report.csv& 'C:\Tools\LockBox\LockBox.Cli.exe' create --source 'D:\Data' --output 'E:\Backups\data.lbx' --master-file 'C:\LockBox\secrets\master.txt' --layer-file 'AES-128-GCM=C:\LockBox\secrets\layer1.txt'/opt/lockbox/LockBox.Cli create --source /srv/data --output /backup/data.lbx --master-file /srv/lockbox/secrets/master.txt --layer-file AES-128-GCM=/srv/lockbox/secrets/layer1.txtПодготовка файлов с секретами
Создайте секреты один раз, сохраните защищённую резервную копию и ограничьте доступ к файлам учётной записью резервного копирования. Примеры запрещают замену существующих ключей. Файлы используют UTF-8: переводы строк в конце удаляются, пробелы сохраняются. Не генерируйте новые ключи для открытия старых архивов.
$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$secretDir = 'C:\LockBox\secrets'
New-Item -ItemType Directory -Force -Path $secretDir | Out-Null
$files = @('master.txt', 'layer1.txt')
foreach ($name in $files) {
if (Test-Path -LiteralPath (Join-Path $secretDir $name)) {
throw "Secret already exists: $name"
}
}
foreach ($name in $files) {
$key = & $cli keygen --count 1
if ($LASTEXITCODE -ne 0) { throw 'Key generation failed' }
[IO.File]::WriteAllText((Join-Path $secretDir $name), [string]$key, [Text.UTF8Encoding]::new($false))
}set -eu
umask 077
mkdir -p /srv/lockbox/secrets
test ! -e /srv/lockbox/secrets/master.txt
test ! -e /srv/lockbox/secrets/layer1.txt
set -C
/opt/lockbox/LockBox.Cli keygen --count 1 > /srv/lockbox/secrets/master.txt
/opt/lockbox/LockBox.Cli keygen --count 1 > /srv/lockbox/secrets/layer1.txtАктивация и статус лицензии
Ключ лицензии привязан к идентификатору устройства, выводимому той же сборкой CLI. Если лицензия скопирована на другой ПК, LockBox её отклоняет и переходит на бесплатную версию.
Windows проверяет существующие местоположения данных приложения LockBox. Linux хранит активацию в
$XDG_CONFIG_HOME/lockbox/.lockbox.license, затем
~/.config/lockbox/.lockbox.license, с ~/.lockbox/.lockbox.license
в качестве резервного варианта.
Получить идентификатор устройства
.\LockBox.Cli.exe device-id
Проверить текущую редакцию
.\LockBox.Cli.exe license
Активировать с помощью лицензионного файла
.\LockBox.Cli.exe activate --license-file "C:\Licenses\lockbox-license.txt"
Активировать через переменную окружения
$env:LBX_LICENSE = "LBX-LIC-..."
.\LockBox.Cli.exe activate --license-env LBX_LICENSE
Инлайн-активация
Инлайн-активация работает, но может утекать через историю оболочки или журналы процессов.
.\LockBox.Cli.exe activate --license "LBX-LIC-..."
Активация в Linux
export LBX_LICENSE="LBX-LIC-..."
./LockBox.Cli activate --license-env LBX_LICENSE
./LockBox.Cli licenseОбработка секретов
Предпочитайте переменные окружения или файлы. Встроенные секреты полезны только для тестирования. Основные пароли и ключи слоев должны сохраняться: без них контейнер нельзя открыть.
| Назначение | Встроенный | Окружение | Файл |
|---|---|---|---|
| Основной пароль | --master value | --master-env ENV | --master-file path |
| Создать ключ слоя | --layer ALG=KEY | --layer-env ALG=ENV | --layer-file ALG=FILE |
| Открыть ключ слоя | --key value | --key-env ENV | --key-file path |
| Пароль файла планировщика | --password value | --password-env ENV | --password-file path |
| Пароль уничтожения контейнера | --destruction-password value | --destruction-password-env ENV | --destruction-password-file path |
| Лицензионный ключ | --license value | --license-env ENV | --license-file path |
Секреты на основе файлов
Set-Content -Path ".\master.txt" -Value "master-password" -Encoding UTF8
Set-Content -Path ".\layer1.txt" -Value "layer-key-1" -Encoding UTF8
.\LockBox.Cli.exe create `
-s "D:\Data" `
-o "E:\Backups\data.lbx" `
--master-file ".\master.txt" `
--layer-file AES-128-GCM=.\layer1.txtАлгоритмы и генерация ключей
Используйте algorithms, чтобы увидеть все поддерживаемые профили и минимальные редакции.
Используйте keygen для ключей слоев.
.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen
.\LockBox.Cli.exe keygen --count 9
.\LockBox.Cli.exe generate-keys -n 20
Поддерживаемые псевдонимы команд:
algorithms
list-algorithms
profiles
keygen
generate-key
generate-keysСоздание контейнеров
create упаковывает исходную папку, применяет необязательное сжатие и добавление отступов,
шифрует полезную нагрузку через один или несколько слоев и записывает контейнер .lbx.
Обязательные параметры
--sourceили-s: исходная папка.--outputили-o: путь вывода.lbx.--master,--master-envили--master-file.- По крайней мере один слой:
--layer,--layer-envили--layer-file.
Минимальный AES-контейнер
.\LockBox.Cli.exe create `
-s "D:\Data" `
-o "E:\Backups\data.lbx" `
--master-env LBX_MASTER `
--layer-env AES-128-GCM=LBX_L1
Сжатый контейнер
.\LockBox.Cli.exe create `
--source "D:\Exports" `
--output "E:\Backups\exports.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--compress
Крипто-отступы
.\LockBox.Cli.exe create `
-s "D:\Contracts" `
-o "E:\Backups\contracts.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--padding 2GB
Разделение контейнера на части
.\LockBox.Cli.exe create `
-s "D:\Media" `
-o "E:\Backups\media.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--split 700MB
Первая часть сохраняет .lbx. Дополнительные части используют
.lbx1, .lbx2 и так далее. Храните все части в одной папке.
Пример максимального девятислойного контейнера
$env:LBX_MASTER = "use-a-long-master-password"
$env:LBX_L1 = "layer-1-key"
$env:LBX_L2 = "layer-2-key"
$env:LBX_L3 = "layer-3-key"
$env:LBX_L4 = "layer-4-key"
$env:LBX_L5 = "layer-5-key"
$env:LBX_L6 = "layer-6-key"
$env:LBX_L7 = "layer-7-key"
$env:LBX_L8 = "layer-8-key"
$env:LBX_L9 = "layer-9-key"
.\LockBox.Cli.exe create `
--source "D:\Data" `
--output "E:\Backups\data-max.lbx" `
--master-env LBX_MASTER `
--compress `
--padding 2GB `
--split 700MB `
--layer-env AES-256-GCM=LBX_L1 `
--layer-env CHACHA20-POLY1305=LBX_L2 `
--layer-env AES-256-CCM=LBX_L3 `
--layer-env SERPENT-256-CTR-HMACSHA512=LBX_L4 `
--layer-env TWOFISH-256-CTR-HMACSHA512=LBX_L5 `
--layer-env CAMELLIA-256-CTR-HMACSHA512=LBX_L6 `
--layer-env ARIA-256-CTR-HMACSHA512=LBX_L7 `
--layer-env AES-256-CBC-HMACSHA512=LBX_L8 `
--layer-env AES-192-OFB-HMACSHA384=LBX_L9
Альтернативный синтаксис алгоритма/ключа
.\LockBox.Cli.exe create `
-s "D:\Data" `
-o "E:\Backups\data.lbx" `
--master-env LBX_MASTER `
--algorithm AES-128-GCM --key-env LBX_L1 `
--algorithm AES-128-CTR-HMACSHA256 --key-env LBX_L2
Удаление исходных данных после успешного ручного создания
.\LockBox.Cli.exe create `
-s "D:\TempToEncrypt" `
-o "E:\Backups\temp.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--delete-source
--delete-source удаляет исходную папку только после успешного создания контейнера.
Планировщик имеет другую опцию: --delete-source-contents.
Пароль уничтожения контейнера
Редакция Max может добавить отдельный пароль уничтожения к контейнеру. Если этот пароль введен позже в качестве мастер-пароля, LockBox немедленно перезаписывает контейнер без подтверждения. Это предназначено для сценариев под давлением. Держите его отдельно от настоящего мастер-пароля.
Команда проверяет свободное место на диске, шифрует исходные данные контейнера с помощью нового случайного
секрета и AES-256-GCM во временный файл, нормализует результат до точного исходного размера,
заменяет оригинальный файл и забывает случайный секрет. Для раздельных контейнеров каждая
.lbx, .lbx1, .lbx2 часть в той же папке заменяется
с сохранением исходных размеров частей.
Создать с паролем уничтожения
$env:LBX_MASTER = "real-master-password"
$env:LBX_L1 = "layer-key-1"
$env:LBX_DESTROY = "pressure-password"
.\LockBox.Cli.exe create `
--source "D:\Data" `
--output "E:\Backups\data.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--destruction-password-env LBX_DESTROY
Запуск уничтожения без ключей слоя
.\LockBox.Cli.exe open `
--container "E:\Backups\data.lbx" `
--output "D:\Restore" `
--master-env LBX_DESTROY
Запуск в Linux
export LBX_DESTROY="pressure-password"
./LockBox.Cli open \
--container "/backup/data.lbx" \
--output "/restore" \
--master-env LBX_DESTROY
После успешного уничтожения контейнер больше не является действительным файлом LockBox. CLI возвращает
код выхода 0, поскольку запрошенное действие уничтожения выполнено успешно.
Открытие контейнеров
open извлекает контейнер в выходную папку. Для обычного извлечения ключи слоев должны
быть переданы в том же порядке, в котором они использовались при создании. Для рабочего процесса с
паролем уничтожения требуется только путь к контейнеру, путь вывода и пароль уничтожения в качестве мастер-пароля.
Открыть однослойный контейнер
.\LockBox.Cli.exe open `
--container "E:\Backups\data.lbx" `
--output "D:\Restore" `
--master-env LBX_MASTER `
--key-env LBX_L1
Открыть раздельный контейнер
.\LockBox.Cli.exe open `
-c "E:\Backups\data.lbx" `
-o "D:\Restore" `
--master-env LBX_MASTER `
--key-env LBX_L1
Открыть многослойный контейнер
.\LockBox.Cli.exe open `
-c "E:\Backups\data-max.lbx" `
-o "D:\Restore" `
--master-env LBX_MASTER `
--key-env LBX_L1 `
--key-env LBX_L2 `
--key-env LBX_L3 `
--key-env LBX_L4 `
--key-env LBX_L5 `
--key-env LBX_L6 `
--key-env LBX_L7 `
--key-env LBX_L8 `
--key-env LBX_L9
Псевдонимы
open
decrypt
extractПроверка архива восстановлением
Для этого примера создайте в исходной папке небольшой файл report.csv. Извлекайте в новую папку: внутри неё сохраняется имя исходного каталога. Храните все части разделённого контейнера вместе. Сравните восстановленные файлы с неизменённым источником. Для временных данных при извлечении нужно доступное для записи место рядом с контейнером; защитите и восстановленные незашифрованные файлы.
$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$container = 'E:\Backups\data.lbx'
$restore = Join-Path 'D:\RestoreChecks' ([guid]::NewGuid().ToString('N'))
& $cli open --container $container --output $restore --master-file 'C:\LockBox\secrets\master.txt' --key-file 'C:\LockBox\secrets\layer1.txt'
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$original = (Get-FileHash -LiteralPath 'D:\Data\report.csv' -Algorithm SHA256).Hash
$restored = (Get-FileHash -LiteralPath (Join-Path $restore 'Data\report.csv') -Algorithm SHA256).Hash
if ($original -ne $restored) { throw 'SHA256 mismatch' }
Write-Output $restoreset -eu
umask 077
mkdir -p /restore
restore=$(mktemp -d /restore/check-XXXXXX)
/opt/lockbox/LockBox.Cli open --container /backup/data.lbx --output "$restore" --master-file /srv/lockbox/secrets/master.txt --key-file /srv/lockbox/secrets/layer1.txt
cmp /srv/data/report.csv "$restore/data/report.csv"
sha256sum /srv/data/report.csv "$restore/data/report.csv"Планировщик
Команды планировщика доступны в максимальной версии. Они сохраняют полные метаданные задачи
в зашифрованном файле .lbxjobs, включая путь источника, путь вывода,
пароли, пароль для уничтожения, ключи слоев, сжатие, заполнение, разбиение и
настройку удаления содержимого источника.
Запланированные задания выполняются только пока работает LockBox.Cli.exe schedule run.
Используйте Планировщик заданий Windows, systemd Linux, cron, обёртку службы или долго работающую консольную
сессию, если вам нужно, чтобы рабочий процесс запускался автоматически после перезагрузки.
Значения частоты
once
30m
hourly
2h
3h
6h
9h
12h
18h
daily
2d
3d
5d
weekly
2w
monthly
2mo
3mo
6mo
9mo
yearly
Добавить ежедневное зашифрованное резервное задание
$env:LBX_JOBS_PASSWORD = "jobs-file-password"
$env:LBX_MASTER = "master-password"
$env:LBX_L1 = "layer-key-1"
$env:LBX_DESTROY = "pressure-password"
.\LockBox.Cli.exe schedule add `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD `
--name "Nightly data backup" `
--frequency daily `
--start ((Get-Date).AddDays(1).ToString("o")) `
--source "D:\Data" `
--output "E:\Backups\nightly-data.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--destruction-password-env LBX_DESTROY `
--compress
Добавить задание, которое удаляет содержимое исходной папки после успешного выполнения
.\LockBox.Cli.exe schedule add `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD `
--name "Encrypt outgoing folder" `
--frequency 30m `
--start ((Get-Date).AddDays(1).ToString("o")) `
--source "D:\Outgoing" `
--output "E:\Backups\outgoing.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--delete-source-contents
Добавить ежемесячный архив с заполнением и разбиением на части
.\LockBox.Cli.exe schedule add `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD `
--name "Monthly legal archive" `
--frequency monthly `
--start ((Get-Date).AddDays(1).ToString("o")) `
--source "D:\Legal" `
--output "E:\Archives\legal-monthly.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--compress `
--padding 4GB `
--split 2GB
Список сохранённых задач
.\LockBox.Cli.exe schedule list `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD
Запустить рабочего планировщика
.\LockBox.Cli.exe schedule run `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD `
--state "E:\Backups\jobs.status.json" `
--poll-seconds 30
Запустить просроченные задачи один раз и выйти
.\LockBox.Cli.exe schedule run-once `
--tasks "E:\Backups\jobs.lbxjobs" `
--password-env LBX_JOBS_PASSWORD `
--state "E:\Backups\jobs.status.json"
Показать последний статус выполнения
.\LockBox.Cli.exe schedule status --state "E:\Backups\jobs.status.json"
Маркеры статуса: [OK], [RUNNING] и [FAILED].
Неудачная задача включает причину и сообщает пользователю связаться со службой поддержки, если проблема повторяется.
JSON скрипты
Используйте --script, когда рабочий процесс имеет несколько шагов. Запуск скрипта поддерживает
create, open, keygen, algorithms,
device-id, license и activate.
Создать и открыть в одном скрипте
{
"stopOnError": true,
"commands": [
{
"command": "create",
"source": "D:\\Data",
"output": "E:\\Backups\\data.lbx",
"masterPasswordEnv": "LBX_MASTER",
"destructionPasswordEnv": "LBX_DESTROY",
"compression": true,
"padding": "512MB",
"split": "700MB",
"layers": [
{ "algorithm": "AES-256-GCM", "keyEnv": "LBX_L1" },
{ "algorithm": "CHACHA20-POLY1305", "keyEnv": "LBX_L2" }
]
},
{
"command": "open",
"container": "E:\\Backups\\data.lbx",
"output": "D:\\Restore",
"masterPasswordEnv": "LBX_MASTER",
"keyEnvs": [ "LBX_L1", "LBX_L2" ]
}
]
}
.\LockBox.Cli.exe --script ".\backup.lockbox.json"
Продолжить после неудачного шага
{
"stopOnError": false,
"commands": [
{ "command": "license" },
{ "command": "algorithms" },
{
"command": "create",
"source": "D:\\BuildOutput",
"output": "E:\\Artifacts\\build.lbx",
"masterPasswordEnv": "LBX_MASTER",
"layers": [
{ "algorithm": "AES-128-GCM", "keyEnv": "LBX_L1" }
]
}
]
}
Активировать из скрипта
{
"commands": [
{
"command": "activate",
"licenseKeyFile": "C:\\Licenses\\lockbox-license.txt"
},
{ "command": "license" }
]
}Поля JSON и правила выполнения
Таблица сопоставляет поля create и массивы ключей open с параметрами CLI. Относительные пути отсчитываются от рабочей папки процесса, а не от JSON-файла. Переменные и даты в строках автоматически не подставляются. Указывайте один источник секрета на поле; open собирает сначала keys, затем keyEnvs и keyFiles. Предпочитайте stopOnError: true: при false успешный последующий шаг может скрыть прежнюю ошибку. Команды планировщика внутри JSON-скриптов не поддерживаются.
{
"stopOnError": true,
"commands": [
{
"command": "create",
"source": "/srv/data",
"output": "/backup/data.lbx",
"masterPasswordFile": "/srv/lockbox/secrets/master.txt",
"layers": [
{ "algorithm": "AES-128-GCM", "keyFile": "/srv/lockbox/secrets/layer1.txt" }
]
},
{
"command": "open",
"container": "/backup/data.lbx",
"output": "/restore/check",
"masterPasswordFile": "/srv/lockbox/secrets/master.txt",
"keyFiles": ["/srv/lockbox/secrets/layer1.txt"]
}
]
}/opt/lockbox/LockBox.Cli --quiet script /srv/lockbox/backup.lockbox.jsonsource / sourceFolder / sourceFolderPath | --source | Папка для упаковки и шифрования. |
output / outputContainerPath | --output | Путь вывода .lbx. |
masterPassword | --master | Встроенный главный пароль. |
masterPasswordEnv | --master-env | Считать главный пароль из переменной окружения. |
masterPasswordFile | --master-file | Считать главный пароль из UTF-8 текстового файла. |
layers[].algorithm + layers[].key | --layer | Добавить ALGORITHM=KEY. |
layers[].algorithm + layers[].keyEnv | --layer-env | Добавить ALGORITHM=ENV. |
layers[].algorithm + layers[].keyFile | --layer-file | Добавить ALGORITHM=FILE. |
compression / compress | --compress | Включить сжатие. |
padding | --padding | Добавить зашифрованную случайную подкладку. Единицы измерения: B, KB, MB, GB, TB. |
paddingBytes | --padding-bytes | Размер подкладки в сырых байтах. |
split / splitSize | --split | Разбить вывод на .lbx, .lbx1, .lbx2. |
splitPartSizeBytes | --split-bytes | Размер части при разбиении в сырых байтах. |
destructionPassword | --destruction-password | Пароль для уничтожения только Макс. При вводе его позже в качестве главного пароля контейнер будет немедленно перезаписан. |
destructionPasswordEnv | --destruction-password-env | Считать пароль для уничтожения только Макс из переменной окружения. |
destructionPasswordFile | --destruction-password-file | Считать пароль для уничтожения только Макс из UTF-8 текстового файла. |
deleteSource / deleteSourceFolderAfterSuccess | --delete-source | Удалить исходную папку после успешного ручного создания. |
container / containerPath | --container | Существующий контейнер .lbx. |
keys[] | --key | Ключ уровня в исходном порядке. |
keyEnvs[] | --key-env | Ключ уровня из переменной окружения. |
keyFiles[] | --key-file | Ключ уровня из текстового файла UTF-8. |
Рецепты автоматизации
Резервное копирование зашифрованной базы данных
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$dump = "D:\DbDumps\$stamp"
New-Item -ItemType Directory -Path $dump | Out-Null
Copy-Item "D:\DatabaseExports\*" $dump -Recurse
.\LockBox.Cli.exe create `
-s $dump `
-o "E:\Backups\db-$stamp.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--compress `
--padding 512MB
Защита артефактов CI
.\LockBox.Cli.exe create `
--source "$env:BUILD_ARTIFACTSTAGINGDIRECTORY" `
--output "$env:AGENT_TEMPDIRECTORY\protected-artifacts.lbx" `
--master-env LBX_MASTER `
--layer-env AES-128-GCM=LBX_L1
Безопасная передача партнёрам
.\LockBox.Cli.exe create `
-s "D:\PartnerPackage" `
-o "E:\Transfer\partner-package.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--layer-env CHACHA20-POLY1305=LBX_L2 `
--compress `
--split 1GB
Долговременный архив
.\LockBox.Cli.exe create `
-s "D:\Records\2026" `
-o "E:\ColdStorage\records-2026.lbx" `
--master-file "C:\Secrets\records-master.txt" `
--layer-file AES-256-GCM=C:\Secrets\records-layer1.txt `
--layer-file SERPENT-256-CTR-HMACSHA512=C:\Secrets\records-layer2.txt `
--compress `
--padding 8GB `
--split 4GB
Пример пакетного файла
@echo off
set LBX_MASTER=master-password
set LBX_L1=layer-key-1
LockBox.Cli.exe create ^
--source "D:\Data" ^
--output "E:\Backups\data.lbx" ^
--master-env LBX_MASTER ^
--layer-env AES-128-GCM=LBX_L1
if errorlevel 1 exit /b %errorlevel%
echo OKWindows: копирование нескольких папок
Сохраните скрипт по указанному пути. Для каждого источника он создаёт отдельный контейнер с уникальным именем и журнал, останавливается при ошибке и сохраняет код возврата CLI. Этот пример с AES-128-GCM работает в Free; сжатие и разделение на части требуют Pro или Max.
C:\LockBox\backup.ps1
param(
[string[]]$Source = @('D:\Data'),
[string]$Destination = 'E:\Backups'
)
$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$secretDir = 'C:\LockBox\secrets'
try {
foreach ($folder in $Source) {
$sourcePath = (Resolve-Path -LiteralPath $folder).Path
$stamp = (Get-Date).ToUniversalTime().ToString('yyyyMMdd-HHmmss-fff')
$runId = [guid]::NewGuid().ToString('N')
$runDir = Join-Path $Destination "$stamp-$runId"
New-Item -ItemType Directory -Path $runDir | Out-Null
$container = Join-Path $runDir 'data.lbx'
$log = Join-Path $runDir 'create.log'
$cliArgs = @(
'--quiet', 'create', '--source', $sourcePath, '--output', $container,
'--master-file', (Join-Path $secretDir 'master.txt'),
'--layer-file', ('AES-128-GCM=' + (Join-Path $secretDir 'layer1.txt'))
)
$ErrorActionPreference = 'Continue'
& $cli @cliArgs > $log 2>&1
$result = $LASTEXITCODE
$ErrorActionPreference = 'Stop'
if ($result -ne 0) {
Get-Content -LiteralPath $log
exit $result
}
if (-not (Test-Path -LiteralPath $container -PathType Leaf)) {
throw "Container missing: $container"
}
Write-Output $container
}
exit 0
} catch {
Write-Error $_ -ErrorAction Continue
exit 1
}& 'C:\LockBox\backup.ps1' -Source 'D:\Data', 'D:\Reports' -Destination 'E:\Backups'
# 0 = success; 1 = runtime error; 2 = usage error; 3 = edition restriction
$LASTEXITCODELinux: копирование без участия пользователя
Сохраните Bash-скрипт с окончаниями строк LF. Установите CLI и подготовьте файлы с секретами по указанным путям. Передайте исходные папки аргументами. Каждый запуск получает уникальный каталог; при ошибке остаётся журнал и возвращается ненулевой код. Исходные файлы сохраняются.
/srv/lockbox/backup.sh
#!/bin/bash
set -eu
umask 077
cli=/opt/lockbox/LockBox.Cli
secret_dir=/srv/lockbox/secrets
backup_root=/backup
mkdir -p "$backup_root"
if [ "$#" -eq 0 ]; then
set -- /srv/data
fi
for source in "$@"; do
run_dir=$(mktemp -d "$backup_root/$(date -u +%Y%m%d-%H%M%S)-XXXXXX")
container="$run_dir/data.lbx"
log="$run_dir/create.log"
"$cli" --quiet create \
--source "$source" \
--output "$container" \
--master-file "$secret_dir/master.txt" \
--layer-file "AES-128-GCM=$secret_dir/layer1.txt" > "$log" 2>&1 || {
result=$?
cat "$log" >&2
exit "$result"
}
test -s "$container"
printf '%s\n' "$container"
done/bin/bash /srv/lockbox/backup.sh /srv/data /srv/reportsЗапуск по расписанию операционной системы
Эти задачи запускают скрипты резервного копирования выше; для такого вызова create не требуется Max. Регистрация Windows ниже работает только при входе выбранного пользователя; при необходимости настройте запуск без входа в Планировщике заданий. Добавьте строку cron в crontab пользователя резервного копирования, проверив наличие flock. Оба примера запускаются в 02:00 по местному времени и исключают наложение плановых запусков. Сначала проверьте права учётной записи и выполните пробный запуск вручную.
Windows
$action = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument '-NoProfile -NonInteractive -File "C:\LockBox\backup.ps1"' -WorkingDirectory 'C:\LockBox'
$trigger = New-ScheduledTaskTrigger -Daily -At '02:00'
$settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -MultipleInstances IgnoreNew -ExecutionTimeLimit ([TimeSpan]::Zero)
$principal = New-ScheduledTaskPrincipal -UserId ([Security.Principal.WindowsIdentity]::GetCurrent().Name) -LogonType Interactive
Register-ScheduledTask -TaskName 'LockBox backup' -Action $action -Trigger $trigger -Settings $settings -Principal $principal
Start-ScheduledTask -TaskName 'LockBox backup'
Get-ScheduledTaskInfo -TaskName 'LockBox backup'New-ScheduledTaskSettingsSet · New-ScheduledTaskPrincipal
Linux: cron
crontab -e0 2 * * * /usr/bin/flock -n /srv/lockbox/backup.lock /bin/bash /srv/lockbox/backup.sh >> /srv/lockbox/cron.log 2>&1Max: обслуживание процесса планировщика
Сначала создайте служебную учётную запись lockbox, предоставьте доступ к указанным путям, активируйте для неё Max и подготовьте отдельный файл пароля jobs.txt в UTF-8. Добавляйте каждую задачу один раз: add дописывает, а не обновляет. Используйте один процесс на файл задач и перезапускайте его после изменения определений. JSON статуса не восстанавливает историю: после перезапуска пропущенные периодические события пересчитываются на будущее, а просроченная задача once может выполниться повторно. Для периодического запуска средствами ОС используйте create, а не повторные run-once. Встроенный планировщик использует одно заданное имя контейнера.
/opt/lockbox/LockBox.Cli schedule add \
--tasks /srv/lockbox/jobs.lbxjobs \
--password-file /srv/lockbox/secrets/jobs.txt \
--name nightly-data --frequency daily \
--start "$(date -d 'tomorrow 02:00' --iso-8601=seconds)" \
--source /srv/data --output /backup/nightly-data.lbx \
--master-file /srv/lockbox/secrets/master.txt \
--layer-file AES-128-GCM=/srv/lockbox/secrets/layer1.txt
/opt/lockbox/LockBox.Cli schedule list --tasks /srv/lockbox/jobs.lbxjobs --password-file /srv/lockbox/secrets/jobs.txt/etc/systemd/system/lockbox-scheduler.service
[Unit]
Description=LockBox scheduler
After=local-fs.target
RequiresMountsFor=/srv/data /srv/lockbox /backup
[Service]
Type=simple
User=lockbox
WorkingDirectory=/srv/lockbox
UMask=0077
ExecStart=/opt/lockbox/LockBox.Cli schedule run --tasks /srv/lockbox/jobs.lbxjobs --password-file /srv/lockbox/secrets/jobs.txt --state /srv/lockbox/jobs.status.json --poll-seconds 30
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
TimeoutStopSec=300
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now lockbox-scheduler.service
systemctl status lockbox-scheduler.service
journalctl -u lockbox-scheduler.service -n 50 --no-pager
/opt/lockbox/LockBox.Cli schedule status --state /srv/lockbox/jobs.status.jsonСправочник команд
| Команда | Назначение | Псевдонимы |
|---|---|---|
help | Показать справку консоли. | --help, -h, ? |
device-id | Вывести ID устройства ПК для выдачи лицензии. | deviceid, machine-id |
license | Показать текущую редакцию и путь к лицензии. | license-status, status |
activate | Установить лицензионный ключ, привязанный к устройству. | activation |
algorithms | Список алгоритмов и минимальных редакций. | profiles, list-algorithms |
keygen | Генерация случайных ключей. | generate-key, generate-keys |
create | Создать зашифрованный контейнер. | encrypt |
open | Извлечь зашифрованный контейнер. | decrypt, extract |
schedule | Управление и запуск запланированных задач. | scheduler, scheduled-tasks |
script | Запуск JSON-файла автоматизации. | --script |
Параметры создания
--source, -s | Папка для упаковки и шифрования. |
--output, -o | Путь вывода .lbx. |
--master | Встроенный главный пароль. |
--master-env | Считать главный пароль из переменной окружения. |
--master-file | Считать главный пароль из UTF-8 текстового файла. |
--layer | Добавить ALGORITHM=KEY. |
--layer-env | Добавить ALGORITHM=ENV. |
--layer-file | Добавить ALGORITHM=FILE. |
--algorithm, -a | Альтернативная форма алгоритма, используемая вместе с --key, --key-env или --key-file. |
--compress | Включить сжатие. |
--no-compress | Отключить сжатие, если оно было включено ранее. |
--padding | Добавить зашифрованную случайную подкладку. Единицы измерения: B, KB, MB, GB, TB. |
--padding-bytes | Размер подкладки в сырых байтах. |
--split | Разбить вывод на .lbx, .lbx1, .lbx2. |
--split-bytes | Размер части при разбиении в сырых байтах. |
--no-split | Отключить разбиение, если оно было включено ранее. |
--destruction-password | Пароль для уничтожения только Макс. При вводе его позже в качестве главного пароля контейнер будет немедленно перезаписан. |
--destruction-password-env | Считать пароль для уничтожения только Макс из переменной окружения. |
--destruction-password-file | Считать пароль для уничтожения только Макс из UTF-8 текстового файла. |
--delete-source | Удалить исходную папку после успешного ручного создания. |
Параметры открытия
--container, -c | Существующий контейнер .lbx. |
--output, -o | Папка для распаковки. |
--master, --master-env, --master-file | Источник мастер-пароля. |
--key, -k | Ключ уровня в исходном порядке. |
--key-env | Ключ уровня из переменной окружения. |
--key-file | Ключ уровня из текстового файла UTF-8. |
— | Допустимо для сценариев с паролем на уничтожение. Обычная распаковка не выполняется после чтения метаданных, если отсутствуют необходимые ключи. |
Параметры планировщика
schedule add | Добавить задачу в зашифрованный .lbxjobs. |
schedule list | Показать сохраненные задачи. |
schedule run | Запустить длительно работающего рабочего. |
schedule run-once | Выполнить просроченные задачи один раз и выйти. |
schedule status | Считать последний JSON статуса выполнения. |
--tasks, --file | Путь к зашифрованному файлу задачи. |
--password, --password-env, --password-file | Пароль для файла задачи. |
--state, --status-file | Путь к JSON статуса выполнения. |
--name | Имя задачи для schedule add. |
--frequency, --every | Частота выполнения задачи. |
--start, --start-at | Локальная дата/время начала. |
--delete-source-contents | Удалять содержимое исходной папки после успешного выполнения запланированной задачи. |
--poll-seconds | Интервал опроса рабочего для schedule run. |
Параметры --language и --lang задают язык консоли, а --quiet скрывает обычный вывод о ходе работы; ошибки по-прежнему выводятся в стандартный поток ошибок. Ctrl+C запрашивает отмену с кодом 1. Код 2 означает ошибку синтаксиса команды, код 3 — недоступность функции создания в текущей редакции. Код 0 возвращается и при намеренном срабатывании пароля уничтожения, поэтому сам по себе не подтверждает извлечение файлов. Перед следующими шагами автоматизации проверьте ожидаемый результат.
Коды возврата и контроль резервных копий
Нулевой код schedule run-once не гарантирует успех задач; schedule status возвращает ноль и при отсутствии статуса. Проверяйте savedAt, lastSuccessAt и lastError. Метка [OK] может означать лишь Ready. Этот монитор рассчитан на ежедневное копирование, работающий процесс с опросом каждые 30 секунд и успешную копию не старше 26 часов; настройте пороги под своё расписание. Состояния в JSON записаны числами. При --quiet успешные create/open не выводят обычные сообщения.
$ErrorActionPreference = 'Stop'
try {
$status = Get-Content -LiteralPath 'E:\Backups\jobs.status.json' -Raw | ConvertFrom-Json
if (@($status.tasks).Count -eq 0) { throw 'No tasks in status file' }
if ([DateTimeOffset]$status.savedAt -lt [DateTimeOffset]::Now.AddMinutes(-2)) {
throw 'Worker status is stale'
}
foreach ($task in $status.tasks) {
if ($task.state -eq 3 -or $task.lastError) { throw "Task failed: $($task.name)" }
if (-not $task.lastSuccessAt -or [DateTimeOffset]$task.lastSuccessAt -lt [DateTimeOffset]::Now.AddHours(-26)) {
throw "No recent successful backup: $($task.name)"
}
}
exit 0
} catch {
Write-Error $_ -ErrorAction Continue
exit 1
}0 -> Ready
1 -> Running
2 -> Completed
3 -> FailedУстранение неполадок
Почему я получаю код выхода 3?
Текущая версия не поддерживает запрашиваемую функцию: слишком много уровней, сжатие, крипто-дополнение, разделение, планировщик или более сильный алгоритм.
Почему извлечение завершается с ошибкой тега аутентификации?
Неверный главный пароль, ключ уровня, порядок уровней или файл контейнера. Для разделённых контейнеров также убедитесь, что все части находятся в одной папке.
Почему планировщик не запускается после закрытия консоли?
schedule run — это рабочий процесс. Держите его открытым или запускайте через Планировщик задач Windows или службу-обертку.
Почему добавление задачи в планировщик сразу не удается?
Планировщик проверяет лицензию, исходную папку, путь вывода, алгоритмы, пароли и доступное дисковое пространство перед сохранением задачи.
Могу ли я хранить пароли планировщика внутри файла .lbxjobs?
Да. Файл .lbxjobs зашифрован паролем файла планировщика и хранит полный метаданные задачи, включая пароли шифрования и ключи уровней.
Что произойдет, если запланированный запуск пересекается с предыдущим?
Новое событие пропускается, задача сообщает о неудачном статусе с объяснением, и будущие запуски продолжаются после завершения активного.
Как избежать хранения секретов в истории командной строки?
Используйте --master-env, --master-file, --layer-env, --layer-file, --destruction-password-env, --destruction-password-file, --password-env и --password-file.