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_L1CLIのインストールと確認
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 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ビルドによって出力されるデバイス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 $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ファイルに保存します。メタデータにはソースパス、出力パス、パスワード、破棄パスワード、レイヤーキー、圧縮、パディング、分割、および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を使用します。スクリプトランナーはcreate、open、keygen、algorithms、device-id、license、および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.jsonsource / sourceFolder / sourceFolderPath | --source | パックして暗号化するフォルダー。 |
output / outputContainerPath | --output | 出力.lbxのパス。 |
masterPassword | --master | マスターパスワードをインラインで指定。 |
masterPasswordEnv | --master-env | 環境変数からマスターパスワードを読み取る。 |
masterPasswordFile | --master-file | UTF-8テキストファイルからマスターパスワードを読み取る。 |
layers[].algorithm + layers[].key | --layer | ALGORITHM=KEYを追加。 |
layers[].algorithm + layers[].keyEnv | --layer-env | ALGORITHM=ENVを追加。 |
layers[].algorithm + layers[].keyFile | --layer-file | ALGORITHM=FILEを追加。 |
compression / compress | --compress | 圧縮を有効にする。 |
padding | --padding | 暗号化されたランダムパディングを追加。単位: B, KB, MB, GB, TB。 |
paddingBytes | --padding-bytes | 生バイトでのパディングサイズ。 |
split / splitSize | --split | 出力を.lbx, .lbx1, .lbx2に分割。 |
splitPartSizeBytes | --split-bytes | 生バイトでの分割パートサイズ。 |
destructionPassword | --destruction-password | 最大専用インライン破壊パスワード。後でマスターパスワードとして入力するとコンテナが即座に上書きされる。 |
destructionPasswordEnv | --destruction-password-env | 最大専用破壊パスワードを環境変数から読み取る。 |
destructionPasswordFile | --destruction-password-file | 最大専用破壊パスワードをUTF-8テキストファイルから読み取る。 |
deleteSource / deleteSourceFolderAfterSuccess | --delete-source | 手動作成が成功した後、元のフォルダを削除する。 |
container / containerPath | --container | 既存の .lbx コンテナ。 |
keys[] | --key | 元の順序でのインラインレイヤーキー。 |
keyEnvs[] | --key-env | 環境変数からのレイヤーキー。 |
keyFiles[] | --key-file | UTF-8 テキストファイルからのレイヤーキー。 |
自動化レシピ
暗号化データベースダンプのバックアップ
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$dump = "D:\DbDumps\$stamp"
New-Item -ItemType Directory -Path $dump | Out-Null
Copy-Item "D:\DatabaseExports\*" $dump -Recurse
.\LockBox.Cli.exe create `
-s $dump `
-o "E:\Backups\db-$stamp.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--compress `
--padding 512MB
CIアーティファクト保護
.\LockBox.Cli.exe create `
--source "$env:BUILD_ARTIFACTSTAGINGDIRECTORY" `
--output "$env:AGENT_TEMPDIRECTORY\protected-artifacts.lbx" `
--master-env LBX_MASTER `
--layer-env AES-128-GCM=LBX_L1
安全なパートナーへの転送
.\LockBox.Cli.exe create `
-s "D:\PartnerPackage" `
-o "E:\Transfer\partner-package.lbx" `
--master-env LBX_MASTER `
--layer-env AES-256-GCM=LBX_L1 `
--layer-env CHACHA20-POLY1305=LBX_L2 `
--compress `
--split 1GB
長期アーカイブ
.\LockBox.Cli.exe create `
-s "D:\Records\2026" `
-o "E:\ColdStorage\records-2026.lbx" `
--master-file "C:\Secrets\records-master.txt" `
--layer-file AES-256-GCM=C:\Secrets\records-layer1.txt `
--layer-file SERPENT-256-CTR-HMACSHA512=C:\Secrets\records-layer2.txt `
--compress `
--padding 8GB `
--split 4GB
バッチファイルの例
@echo off
set LBX_MASTER=master-password
set LBX_L1=layer-key-1
LockBox.Cli.exe create ^
--source "D:\Data" ^
--output "E:\Backups\data.lbx" ^
--master-env LBX_MASTER ^
--layer-env AES-128-GCM=LBX_L1
if errorlevel 1 exit /b %errorlevel%
echo OKWindows:複数フォルダーのバックアップ
指定パスにスクリプトを保存します。入力元ごとに一意の名前のコンテナーとログを作成し、失敗時はCLIの終了コードを保持して停止します。AES-128-GCMはFreeで利用可能です。圧縮と分割にはProまたはMaxが必要です。
C:\LockBox\backup.ps1
param(
[string[]]$Source = @('D:\Data'),
[string]$Destination = 'E:\Backups'
)
$ErrorActionPreference = 'Stop'
$cli = 'C:\Tools\LockBox\LockBox.Cli.exe'
$secretDir = 'C:\LockBox\secrets'
try {
foreach ($folder in $Source) {
$sourcePath = (Resolve-Path -LiteralPath $folder).Path
$stamp = (Get-Date).ToUniversalTime().ToString('yyyyMMdd-HHmmss-fff')
$runId = [guid]::NewGuid().ToString('N')
$runDir = Join-Path $Destination "$stamp-$runId"
New-Item -ItemType Directory -Path $runDir | Out-Null
$container = Join-Path $runDir 'data.lbx'
$log = Join-Path $runDir 'create.log'
$cliArgs = @(
'--quiet', 'create', '--source', $sourcePath, '--output', $container,
'--master-file', (Join-Path $secretDir 'master.txt'),
'--layer-file', ('AES-128-GCM=' + (Join-Path $secretDir 'layer1.txt'))
)
$ErrorActionPreference = 'Continue'
& $cli @cliArgs > $log 2>&1
$result = $LASTEXITCODE
$ErrorActionPreference = 'Stop'
if ($result -ne 0) {
Get-Content -LiteralPath $log
exit $result
}
if (-not (Test-Path -LiteralPath $container -PathType Leaf)) {
throw "Container missing: $container"
}
Write-Output $container
}
exit 0
} catch {
Write-Error $_ -ErrorAction Continue
exit 1
}& 'C:\LockBox\backup.ps1' -Source 'D:\Data', 'D:\Reports' -Destination 'E:\Backups'
# 0 = success; 1 = runtime error; 2 = usage error; 3 = edition restriction
$LASTEXITCODELinux:無人バックアップ
BashスクリプトをLF改行で保存します。指定パスにCLIと秘密情報を用意し、入力元フォルダーを引数で渡してください。実行ごとに別のディレクトリーを作成します。失敗時はログを残してゼロ以外のコードを返し、入力元は保持します。
/srv/lockbox/backup.sh
#!/bin/bash
set -eu
umask 077
cli=/opt/lockbox/LockBox.Cli
secret_dir=/srv/lockbox/secrets
backup_root=/backup
mkdir -p "$backup_root"
if [ "$#" -eq 0 ]; then
set -- /srv/data
fi
for source in "$@"; do
run_dir=$(mktemp -d "$backup_root/$(date -u +%Y%m%d-%H%M%S)-XXXXXX")
container="$run_dir/data.lbx"
log="$run_dir/create.log"
"$cli" --quiet create \
--source "$source" \
--output "$container" \
--master-file "$secret_dir/master.txt" \
--layer-file "AES-128-GCM=$secret_dir/layer1.txt" > "$log" 2>&1 || {
result=$?
cat "$log" >&2
exit "$result"
}
test -s "$container"
printf '%s\n' "$container"
done/bin/bash /srv/lockbox/backup.sh /srv/data /srv/reportsOSによる定期実行
これらのタスクは上記スクリプトを起動します。この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 -e0 2 * * * /usr/bin/flock -n /srv/lockbox/backup.lock /bin/bash /srv/lockbox/backup.sh >> /srv/lockbox/cron.log 2>&1Max:スケジューラの運用
必要な権限を持つサービスアカウント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.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 | ライセンス発行用の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 |
script | JSON自動化ファイルを実行します。 | --script |
オプションを作成
--source, -s | パックして暗号化するフォルダー。 |
--output, -o | 出力.lbxのパス。 |
--master | マスターパスワードをインラインで指定。 |
--master-env | 環境変数からマスターパスワードを読み取る。 |
--master-file | UTF-8テキストファイルからマスターパスワードを読み取る。 |
--layer | ALGORITHM=KEYを追加。 |
--layer-env | ALGORITHM=ENVを追加。 |
--layer-file | ALGORITHM=FILEを追加。 |
--algorithm, -a | --key, --key-env, または--key-fileと組み合わせる代替アルゴリズム。 |
--compress | 圧縮を有効にする。 |
--no-compress | 以前に設定した場合の圧縮を無効にする。 |
--padding | 暗号化されたランダムパディングを追加。単位: B, KB, MB, GB, TB。 |
--padding-bytes | 生バイトでのパディングサイズ。 |
--split | 出力を.lbx, .lbx1, .lbx2に分割。 |
--split-bytes | 生バイトでの分割パートサイズ。 |
--no-split | 以前に設定した場合の分割を無効にする。 |
--destruction-password | 最大専用インライン破壊パスワード。後でマスターパスワードとして入力するとコンテナが即座に上書きされる。 |
--destruction-password-env | 最大専用破壊パスワードを環境変数から読み取る。 |
--destruction-password-file | 最大専用破壊パスワードをUTF-8テキストファイルから読み取る。 |
--delete-source | 手動作成が成功した後、元のフォルダを削除する。 |
オプションを開く
--container, -c | 既存の .lbx コンテナ。 |
--output, -o | 抽出フォルダー。 |
--master, --master-env, --master-file | マスターパスワードのソース。 |
--key, -k | 元の順序でのインラインレイヤーキー。 |
--key-env | 環境変数からのレイヤーキー。 |
--key-file | UTF-8 テキストファイルからのレイヤーキー。 |
— | 破壊パスワードワークフローで許可されます。必要なキーがない場合、通常の抽出はメタデータ読み取り後に失敗します。 |
スケジューラーオプション
schedule add | 暗号化された .lbxjobs にタスクを追加。 |
schedule list | 保存されたタスクを表示。 |
schedule run | 長時間実行されるワーカーを実行。 |
schedule run-once | 期限が来たタスクを一度だけ実行して終了。 |
schedule status | 最新のランタイムステータスJSONを読み込む。 |
--tasks, --file | 暗号化されたタスクファイルのパス。 |
--password, --password-env, --password-file | タスクファイルのパスワード。 |
--state, --status-file | ランタイムステータスJSONのパス。 |
--name | schedule add 用のタスク名。 |
--frequency, --every | タスクの頻度。 |
--start, --start-at | ローカルの開始日時。 |
--delete-source-contents | スケジュールされた実行が成功した後に元のソースフォルダの内容を削除。 |
--poll-seconds | schedule run のワーカーポーリング間隔。 |
コンソール言語の選択には--languageまたは--lang、通常の進捗表示の抑制には--quietを使います。エラーは引き続き標準エラー出力に送られます。Ctrl+Cはキャンセルを要求し、コード1を返します。コード2はコマンド構文が無効であることを、コード3は現在のエディションで作成機能が利用できないことを示します。コード0には破壊パスワードを意図的に発動させた場合も含まれるため、それだけでファイルが抽出されたとは判断できません。後続の自動処理を実行する前に、期待する出力を確認してください。
終了コードと監視
schedule run-onceはタスクが失敗してもゼロを返す場合があり、schedule statusも状態がなくてもゼロを返します。savedAt、lastSuccessAt、lastErrorを確認してください。[OK]が単にReadyを示す場合もあります。この監視例は毎日のバックアップ、30秒間隔の確認、26時間以内の成功を想定します。しきい値を調整してください。JSONの状態は数値です。--quietは成功したcreate/openの通常出力を抑制します。
$ErrorActionPreference = 'Stop'
try {
$status = Get-Content -LiteralPath 'E:\Backups\jobs.status.json' -Raw | ConvertFrom-Json
if (@($status.tasks).Count -eq 0) { throw 'No tasks in status file' }
if ([DateTimeOffset]$status.savedAt -lt [DateTimeOffset]::Now.AddMinutes(-2)) {
throw 'Worker status is stale'
}
foreach ($task in $status.tasks) {
if ($task.state -eq 3 -or $task.lastError) { throw "Task failed: $($task.name)" }
if (-not $task.lastSuccessAt -or [DateTimeOffset]$task.lastSuccessAt -lt [DateTimeOffset]::Now.AddHours(-26)) {
throw "No recent successful backup: $($task.name)"
}
}
exit 0
} catch {
Write-Error $_ -ErrorAction Continue
exit 1
}0 -> Ready
1 -> Running
2 -> Completed
3 -> Failedトラブルシューティング
終了コード3が出るのですか?
現行版では、要求された機能、すなわちレイヤー数の多さ、圧縮、暗号パディング、分割、スケジューラ、またはより強力なアルゴリズムが許可されていません。
なぜ認証タグエラーで抽出が失敗するのでしょうか?
マスターパスワード、レイヤーキー、レイヤー順序、コンテナファイルが間違っています。分割コンテナの場合は、すべての部品が同じフォルダ内に存在しているかも確認してください。
なぜコンソールを閉じた後にスケジューラーが動作しないのですか?
schedule runワーカープロセスです。開いたままにするか、Windowsタスクスケジューラやサービスラッパーから起動してください。
なぜスケジュール追加はすぐに失敗するのでしょうか?
スケジューラはライセンス、ソースフォルダ、出力パス、アルゴリズム、パスワード、利用可能なディスク容量を検証してからタスクを保存します。
スケジューラのパスワードを.lbxjobsファイル内に保存できますか?
はい。.lbxjobsファイルはスケジューラファイルのパスワードで暗号化されており、暗号化パスワードやレイヤーキーを含むタスクのメタデータを保存しています。
予定されたランが前のランと重なったらどうなりますか?
新しいイベントはスキップされ、タスクは説明付きの失敗状態を報告し、アクティブな実行が終わった後も次の実行は続きます。
シェルの歴史に秘密が出るのを避けるにはどうすればいいですか?
--master-env、--master-file、--layer-env、--layer-file、--destruction-password-env、--destruction-password-file、--password-env、--password-fileを使いましょう。