Назад до LockBox

Документація 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 SHA256
uname -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.zip

SHA256SUMS.txt

Windows 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 $restore
set -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.json
source / 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 OK

Windows: копіювання кількох папок

Збережіть скрипт за вказаним шляхом. Для кожного джерела він створює окремий контейнер з унікальним іменем і журнал, зупиняється за помилки та зберігає код повернення 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
$LASTEXITCODE

Linux: копіювання без участі користувача

Збережіть 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 -e
0 2 * * * /usr/bin/flock -n /srv/lockbox/backup.lock /bin/bash /srv/lockbox/backup.sh >> /srv/lockbox/cron.log 2>&1

crontab(5)

Max: обслуговування процесу планувальника

Спочатку створіть службовий обліковий запис 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.target
sudo 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

systemd.service

Довідник команд

КомандаПризначенняАліаси
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.