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 설치 및 확인
운영체제와 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은 소스 폴더를 패킹하고, 선택적 압축 및 패딩을 적용하며,
하나 이상의 레이어를 통해 페이로드를 암호화하고 .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 $restoreset -eu
umask 077
mkdir -p /restore
restore=$(mktemp -d /restore/check-XXXXXX)
/opt/lockbox/LockBox.Cli open --container /backup/data.lbx --output "$restore" --master-file /srv/lockbox/secrets/master.txt --key-file /srv/lockbox/secrets/layer1.txt
cmp /srv/data/report.csv "$restore/data/report.csv"
sha256sum /srv/data/report.csv "$restore/data/report.csv"스케줄러
스케줄러 명령은 Max 버전에서 사용할 수 있습니다. 이들은 전체 작업 메타데이터를 암호화된 형식으로 저장합니다 .lbxjobs 파일, 소스 경로, 출력 경로, 비밀번호, 삭제 비밀번호, 레이어 키, 압축, 패딩, 분할, 그리고 소스 내용 삭제 설정을 포함합니다.
예약된 작업은 LockBox.Cli.exe schedule run 실행 중입니다.
Windows 작업 스케줄러, 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.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와 비밀 파일을 준비하고 원본 폴더를 인수로 전달합니다. 실행마다 별도 디렉터리가 생깁니다. 실패하면 로그와 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 -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 작업은 다시 실행될 수 있습니다. 운영체제의 주기적 실행에는 반복 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는 작업 실패에도 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을 사용하십시오.