락박스로 돌아가기

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 설치 및 확인

운영체제와 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은 소스 폴더를 패킹하고, 선택적 압축 및 패딩을 적용하며, 하나 이상의 레이어를 통해 페이로드를 암호화하고 .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 등을 사용합니다. 모든 부분을 같은 폴더에 보관하십시오.

9레이어 최대 예제

$env:LBX_MASTER = "use-a-long-master-password"
$env:LBX_L1 = "layer-1-key"
$env:LBX_L2 = "layer-2-key"
$env:LBX_L3 = "layer-3-key"
$env:LBX_L4 = "layer-4-key"
$env:LBX_L5 = "layer-5-key"
$env:LBX_L6 = "layer-6-key"
$env:LBX_L7 = "layer-7-key"
$env:LBX_L8 = "layer-8-key"
$env:LBX_L9 = "layer-9-key"

.\LockBox.Cli.exe create `
  --source "D:\Data" `
  --output "E:\Backups\data-max.lbx" `
  --master-env LBX_MASTER `
  --compress `
  --padding 2GB `
  --split 700MB `
  --layer-env AES-256-GCM=LBX_L1 `
  --layer-env CHACHA20-POLY1305=LBX_L2 `
  --layer-env AES-256-CCM=LBX_L3 `
  --layer-env SERPENT-256-CTR-HMACSHA512=LBX_L4 `
  --layer-env TWOFISH-256-CTR-HMACSHA512=LBX_L5 `
  --layer-env CAMELLIA-256-CTR-HMACSHA512=LBX_L6 `
  --layer-env ARIA-256-CTR-HMACSHA512=LBX_L7 `
  --layer-env AES-256-CBC-HMACSHA512=LBX_L8 `
  --layer-env AES-192-OFB-HMACSHA384=LBX_L9

대체 알고리즘/키 구문

.\LockBox.Cli.exe create `
  -s "D:\Data" `
  -o "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --algorithm AES-128-GCM --key-env LBX_L1 `
  --algorithm AES-128-CTR-HMACSHA256 --key-env LBX_L2

수동 생성 성공 후 소스 삭제

.\LockBox.Cli.exe create `
  -s "D:\TempToEncrypt" `
  -o "E:\Backups\temp.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --delete-source

--delete-source은 컨테이너가 성공적으로 생성된 후에만 소스 폴더를 삭제합니다. 스케줄러에는 다른 옵션이 있습니다: --delete-source-contents.

컨테이너 파괴 비밀번호

Max 버전은 컨테이너에 별도의 파기 비밀번호를 추가할 수 있습니다. 나중에 해당 비밀번호를 마스터 비밀번호로 입력하면, LockBox는 확인 없이 즉시 컨테이너를 덮어씁니다. 이는 강압 상황을 위해 설계된 기능입니다. 실제 마스터 비밀번호와는 별도로 유지하십시오.

이 명령은 free 디스크 공간을 확인하고, 원본 컨테이너 데이터를 새로운 무작위 비밀키와 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

리눅스 트리거

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 작업 스케줄러, 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을 지원합니다.

하나의 스크립트에서 생성하고 열기

{
  "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-fileUTF-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와 비밀 파일을 준비하고 원본 폴더를 인수로 전달합니다. 실행마다 별도 디렉터리가 생깁니다. 실패하면 로그와 0이 아닌 코드를 남기며 원본은 유지됩니다.

/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 등록 예시는 사용자가 로그인한 동안만 실행됩니다. 필요하면 작업 스케줄러에서 로그아웃 중 실행을 설정하세요. 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 작업은 다시 실행될 수 있습니다. 운영체제의 주기적 실행에는 반복 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-fileUTF-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는 작업 실패에도 0을 반환할 수 있고 schedule status는 상태가 없어도 0을 반환합니다. 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 작업 스케줄러 또는 서비스 래퍼에서 실행하십시오.

왜 schedule add가 즉시 실패합니까?

스케줄러는 작업을 저장하기 전에 라이선스, 소스 폴더, 출력 경로, 알고리즘, 암호, 사용 가능한 디스크 공간을 검증합니다.

스케줄러 암호를 .lbxjobs 파일 안에 저장할 수 있습니까?

예. .lbxjobs 파일은 스케줄러 파일 암호로 암호화되며, 암호화 암호와 레이어 키를 포함한 전체 작업 메타데이터를 저장합니다.

예정된 실행이 이전 실행과 겹치면 어떻게 됩니까?

새 이벤트는 건너뛰고 작업은 실패 상태와 설명을 보고하며, 활성 실행이 끝난 후 미래 실행이 계속됩니다.

셸 기록에 비밀을 남기지 않으려면 어떻게 해야 합니까?

--master-env, --master-file, --layer-env, --layer-file, --destruction-password-env, --destruction-password-file, --password-env, --password-file을 사용하십시오.