Документація LockBox CLI
LockBox CLI — англомовна версія для автоматизації, призначена для сценарного шифрування, витягу, активації, запланованого шифрованого резервного копіювання та робочих процесів 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 її відхилить і повернеться до Free.
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
Інлайнова активація
Інлайнова активація працює, але може витікати через історію shell або логи процесів.
.\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 і так далі. Зберігайте всі частини в одній папці.
Приклад дев’ятирівневого Max
$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 edition може додати окремий пароль знищення до контейнера. Якщо цей пароль буде введений пізніше як головний пароль, 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"Планувальник
Команди планувальника доступні в Max-версії. Вони зберігають повні метадані завдання
у зашифрованому файлі .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 | Пароль для знищення тільки Max-inline. Введення його пізніше як майстер-пароля одразу перезаписує контейнер. |
destructionPasswordEnv | --destruction-password-env | Зчитати пароль для знищення тільки Max з змінної середовища. |
destructionPasswordFile | --destruction-password-file | Зчитати пароль для знищення тільки Max з 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 | Пароль для знищення тільки Max-inline. Введення його пізніше як майстер-пароля одразу перезаписує контейнер. |
--destruction-password-env | Зчитати пароль для знищення тільки Max з змінної середовища. |
--destruction-password-file | Зчитати пароль для знищення тільки Max з 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.