ロックボックスに戻る

LockBox CLIドキュメント

LockBox CLIはスクリプトによる暗号化、抽出、アクティベーション、スケジュール暗号化バックアップ、CI/CDワークフロー用の英語専用自動化ビルドです。デスクトップアプリと同じデバイス紐付けライセンスモデルを使用します。

クイックスタート

LockBox.Cli.exePATH に含まれるフォルダーに置くか、フルパスで呼び出してください。--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のインストールと確認

OSとCPUに合う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ビルドによって出力されるデバイスIDに紐付けられます。もしライセンスを別のPCにコピーすると、LockBoxはそれを拒否し、Freeにフォールバックします。

Windowsは既存のLockBoxアプリケーションデータの場所を確認します。Linuxはアクティベーションを $XDG_CONFIG_HOME/lockbox/.lockbox.license に保存し、次に ~/.config/lockbox/.lockbox.license、予備として ~/.lockbox/.lockbox.license を使用します。

デバイスIDを取得

.\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 はソースフォルダーをパックし、オプションで圧縮とパディングを適用し、 ペイロードを1層以上のレイヤーで暗号化し、.lbx コンテナを書き込みます。

必須オプション

  • --source または -s:ソースフォルダー。
  • --output または -o:出力 .lbx パス。
  • --master--master-env、または --master-file
  • 少なくとも1つのレイヤー:--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 などを使用します。すべてのパートを同じフォルダーに保管してください。

9層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はコンテナを出力フォルダに抽出します。通常の抽出では、作成時に使用したのと同じ順序でレイヤーキーを渡す必要があります。破壊パスワードワークフローの場合、コンテナパス、出力パス、およびマスターパスワードとしての破壊パスワードだけが必要です。

1レイヤーコンテナを開く

.\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ファイルに保存します。メタデータにはソースパス、出力パス、パスワード、破棄パスワード、レイヤーキー、圧縮、パディング、分割、およびdelete-source-contents設定が含まれます。

スケジュールされたジョブは、LockBox.Cli.exe schedule runが実行中のときのみ実行されます。 再起動後にワーカーを自動的に開始する必要がある場合は、Windowsタスクスケジューラ、Linux systemd、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を使用します。スクリプトランナーはcreateopenkeygenalgorithmsdevice-idlicense、およびactivateをサポートしています。

1つのスクリプトで作成して開く

{
  "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-fileUTF-8テキストファイルからマスターパスワードを読み取る。
layers[].algorithm + layers[].key--layerALGORITHM=KEYを追加。
layers[].algorithm + layers[].keyEnv--layer-envALGORITHM=ENVを追加。
layers[].algorithm + layers[].keyFile--layer-fileALGORITHM=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-fileUTF-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

OSによる定期実行

これらのタスクは上記スクリプトを起動します。このcreateの利用にMaxは不要です。Windowsの登録例はユーザーのログイン中のみ動作します。ログアウト中も必要ならタスクスケジューラで設定してください。flockのインストールを確認し、バックアップ用ユーザーのcrontabにcron行を追加します。両例とも現地時間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を有効化し、別のUTF-8パスワードファイルjobs.txtを用意してください。addは更新ではなく追加なので、各タスクに一度だけ実行します。タスクファイルごとにプロセスを一つ起動し、定義の変更後は再起動します。状態JSONは履歴を復元しません。期限を過ぎた定期実行はスキップされ、期限切れのonceタスクは再実行される場合があります。OSの周期的な起動にはrun-onceの繰り返しではなくcreateを使います。内蔵スケジューラは指定の出力名を再利用します。

/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ライセンス発行用のPCデバイス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
scriptJSON自動化ファイルを実行します。--script

オプションを作成

--source, -sパックして暗号化するフォルダー。
--output, -o出力.lbxのパス。
--masterマスターパスワードをインラインで指定。
--master-env環境変数からマスターパスワードを読み取る。
--master-fileUTF-8テキストファイルからマスターパスワードを読み取る。
--layerALGORITHM=KEYを追加。
--layer-envALGORITHM=ENVを追加。
--layer-fileALGORITHM=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-fileUTF-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のパス。
--nameschedule add 用のタスク名。
--frequency, --everyタスクの頻度。
--start, --start-atローカルの開始日時。
--delete-source-contentsスケジュールされた実行が成功した後に元のソースフォルダの内容を削除。
--poll-secondsschedule 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を使いましょう。