Volver a LockBox

Documentación CLI de LockBox

LockBox CLI es la versión de automatización solo en inglés para cifrado, extracción, activación, copias de seguridad cifradas programadas y flujos de trabajo CI/CD mediante scripts. Utiliza el mismo modelo de licencia vinculada al dispositivo que la aplicación de escritorio.

Inicio rápido

Coloque LockBox.Cli.exe en una carpeta incluida en PATH, o llámelo por ruta completa. El marcador --cli se acepta por compatibilidad pero no es obligatorio en la versión solo CLI.

.\LockBox.Cli.exe --help
.\LockBox.Cli.exe device-id
.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen --count 3

Flujo de trabajo mínimo para crear y abrir:

$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 usa los mismos comandos con rutas con barra y un binario sin el sufijo .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

Instalar y comprobar la CLI

Extraiga el ZIP correspondiente al sistema y procesador. .NET está incluido. Compare el hash con SHA256SUMS.txt. Coloque la CLI en la ruta absoluta indicada a continuación y compruebe la ayuda y licencia con la cuenta de copias de seguridad.

Linux también necesita dependencias nativas de la distribución, como ICU y OpenSSL; el .NET incluido no las aporta. En Windows, la directiva de ejecución vigente debe permitir los scripts 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

Carpetas, rutas y espacio

Adapte las rutas. La carpeta de origen no debe estar vacía y el contenedor debe quedar fuera de ella. Reutilizar el nombre de destino reemplaza el contenedor y sus partes. Reserve espacio temporal junto al contenedor y una copia del origen para tareas programadas. Las unidades se basan en 1024; el relleno añade bytes.

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

Preparar archivos de secretos

Genere los secretos una sola vez, guarde una copia protegida y limite el acceso a los archivos. Los ejemplos impiden reemplazar claves existentes. Los archivos UTF-8 conservan espacios y eliminan saltos de línea finales. Guarde las claves originales para abrir copias antiguas.

$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

Estado de activación y licencia

La clave de licencia está vinculada al ID del dispositivo impreso por la misma compilación CLI. Si se copia una licencia a otra PC, LockBox la rechaza y vuelve a Free.

Windows comprueba las ubicaciones de datos de la aplicación LockBox existentes. Linux almacena la activación en $XDG_CONFIG_HOME/lockbox/.lockbox.license, luego ~/.config/lockbox/.lockbox.license, con ~/.lockbox/.lockbox.license como respaldo.

Obtener ID del dispositivo

.\LockBox.Cli.exe device-id

Comprobar la edición actual

.\LockBox.Cli.exe license

Activar desde un archivo de licencia

.\LockBox.Cli.exe activate --license-file "C:\Licenses\lockbox-license.txt"

Activar desde una variable de entorno

$env:LBX_LICENSE = "LBX-LIC-..."
.\LockBox.Cli.exe activate --license-env LBX_LICENSE

Activación en línea

La activación en línea funciona, pero puede filtrarse a través del historial de la shell o los registros de procesos.

.\LockBox.Cli.exe activate --license "LBX-LIC-..."

Activación en Linux

export LBX_LICENSE="LBX-LIC-..."
./LockBox.Cli activate --license-env LBX_LICENSE
./LockBox.Cli license

Manejo de secretos

Prefiera variables de entorno o archivos. Los secretos en línea son útiles solo para pruebas. Las contraseñas maestras y las claves de capa deben conservarse: sin ellas, el contenedor no puede abrirse.

PropósitoEn líneaEntornoArchivo
Contraseña maestra--master value--master-env ENV--master-file path
Crear clave de capa--layer ALG=KEY--layer-env ALG=ENV--layer-file ALG=FILE
Abrir clave de capa--key value--key-env ENV--key-file path
Contraseña del archivo del programador--password value--password-env ENV--password-file path
Contraseña de destrucción del contenedor--destruction-password value--destruction-password-env ENV--destruction-password-file path
Clave de licencia--license value--license-env ENV--license-file path

Secretos basados en archivos

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

Algoritmos y generación de claves

Use algorithms para ver todos los perfiles compatibles y las ediciones mínimas. Use keygen para claves de capa.

.\LockBox.Cli.exe algorithms
.\LockBox.Cli.exe keygen
.\LockBox.Cli.exe keygen --count 9
.\LockBox.Cli.exe generate-keys -n 20

Alias de comandos compatibles:

algorithms
list-algorithms
profiles

keygen
generate-key
generate-keys

Crear contenedores

create empaqueta una carpeta de origen, aplica compresión y relleno opcionales, cifra la carga útil a través de una o más capas, y escribe un contenedor .lbx.

Opciones requeridas

  • --source o -s: carpeta de origen.
  • --output o -o: ruta de salida del .lbx.
  • --master, --master-env, o --master-file.
  • Al menos una capa: --layer, --layer-env, o --layer-file.

Contenedor AES mínimo

.\LockBox.Cli.exe create `
  -s "D:\Data" `
  -o "E:\Backups\data.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-128-GCM=LBX_L1

Contenedor comprimido

.\LockBox.Cli.exe create `
  --source "D:\Exports" `
  --output "E:\Backups\exports.lbx" `
  --master-env LBX_MASTER `
  --layer-env AES-256-GCM=LBX_L1 `
  --compress

Relleno criptográfico

.\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

Dividir contenedor en partes

.\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

La primera parte mantiene .lbx. Las partes adicionales usan .lbx1, .lbx2, y así sucesivamente. Mantenga todas las partes en la misma carpeta.

Ejemplo de Max de nueve capas

$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

Sintaxis alternativa de algoritmo/clave

.\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

Eliminar fuente tras creación manual exitosa

.\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 elimina la carpeta de origen solo después de que el contenedor se haya creado con éxito. El programador tiene una opción diferente: --delete-source-contents.

Contraseña de destrucción del contenedor

La edición Max puede añadir una contraseña de destrucción separada a un contenedor. Si esta contraseña se introduce más tarde como la contraseña maestra, LockBox sobrescribe inmediatamente el contenedor sin confirmación. Esto está diseñado para escenarios de presión o coacción. Mantenla separada de la verdadera contraseña maestra.

El comando verifica el espacio libre en disco, encripta los datos originales del contenedor con un nuevo secreto aleatorio y AES-256-GCM en un archivo temporal, normaliza el resultado al tamaño exacto del original, reemplaza el archivo original y olvida el secreto aleatorio. Para contenedores divididos, cada .lbx, .lbx1, .lbx2 parte en la misma carpeta se reemplaza manteniendo los tamaños originales de las partes.

Crear con una contraseña de destrucción

$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

Activar destrucción sin claves de capa

.\LockBox.Cli.exe open `
  --container "E:\Backups\data.lbx" `
  --output "D:\Restore" `
  --master-env LBX_DESTROY

Disparador en Linux

export LBX_DESTROY="pressure-password"
./LockBox.Cli open \
  --container "/backup/data.lbx" \
  --output "/restore" \
  --master-env LBX_DESTROY

Tras una destrucción exitosa, el contenedor ya no es un archivo válido de LockBox. La CLI devuelve el código de salida 0 porque la acción de destrucción solicitada se completó correctamente.

Abrir contenedores

open extrae un contenedor a la carpeta de salida. Para una extracción normal, las claves de capa deben proporcionarse en el mismo orden usado durante la creación. Para un flujo de trabajo con contraseña de destrucción, solo se requieren la ruta del contenedor, la ruta de salida y la contraseña de destrucción como contraseña maestra.

Abrir un contenedor de una sola capa

.\LockBox.Cli.exe open `
  --container "E:\Backups\data.lbx" `
  --output "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1

Abrir un contenedor dividido

.\LockBox.Cli.exe open `
  -c "E:\Backups\data.lbx" `
  -o "D:\Restore" `
  --master-env LBX_MASTER `
  --key-env LBX_L1

Abrir un contenedor de varias capas

.\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

Alias

open
decrypt
extract

Comprobar una copia restaurándola

Cree un pequeño report.csv de prueba. Extraiga a una carpeta nueva, que contendrá el nombre de la carpeta original. Mantenga juntas todas las partes y compare con el origen sin modificar. La extracción necesita espacio temporal escribible junto al contenedor. Proteja también los archivos restaurados sin cifrar.

$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"

Programador

Los comandos del programador están disponibles en la edición Max. Almacenan los metadatos completos de la tarea en un archivo .lbxjobs encriptado, incluyendo la ruta de origen, ruta de salida, contraseñas, contraseña de destrucción, claves de capas, compresión, relleno, división y la configuración de eliminar el contenido de la fuente.

Los trabajos programados se ejecutan solo mientras LockBox.Cli.exe schedule run esté en funcionamiento. Use el Programador de Tareas de Windows, systemd de Linux, cron, un envoltorio de servicio o una sesión de consola de larga duración si necesita que el trabajador se inicie automáticamente después del reinicio.

Valores de frecuencia

once
30m
hourly
2h
3h
6h
9h
12h
18h
daily
2d
3d
5d
weekly
2w
monthly
2mo
3mo
6mo
9mo
yearly

Agregar una tarea diaria de respaldo encriptado

$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

Agregar una tarea que elimine el contenido de la carpeta de origen después del éxito

.\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

Agregar un archivo mensual con relleno y partes divididas

.\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

Listar tareas guardadas

.\LockBox.Cli.exe schedule list `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD

Ejecutar el trabajador del programador

.\LockBox.Cli.exe schedule run `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --state "E:\Backups\jobs.status.json" `
  --poll-seconds 30

Ejecutar las tareas pendientes una vez y salir

.\LockBox.Cli.exe schedule run-once `
  --tasks "E:\Backups\jobs.lbxjobs" `
  --password-env LBX_JOBS_PASSWORD `
  --state "E:\Backups\jobs.status.json"

Mostrar el estado de ejecución más reciente

.\LockBox.Cli.exe schedule status --state "E:\Backups\jobs.status.json"

Los marcadores de estado son [OK], [RUNNING] y [FAILED]. Una tarea fallida incluye la razón e indica al usuario que contacte al soporte si el problema se repite.

Scripts JSON

Use --script cuando un flujo de trabajo tenga varios pasos. El ejecutor de scripts soporta create, open, keygen, algorithms, device-id, license y activate.

Crear y abrir en un solo script

{
  "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"

Continuar después de un paso fallido

{
  "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" }
      ]
    }
  ]
}

Activar desde un script

{
  "commands": [
    {
      "command": "activate",
      "licenseKeyFile": "C:\\Licenses\\lockbox-license.txt"
    },
    { "command": "license" }
  ]
}

Campos JSON y reglas de ejecución

La tabla relaciona campos create y matrices de claves open con opciones CLI. Las rutas relativas parten del directorio de trabajo del proceso; no se sustituyen variables ni fechas. Use una fuente de secreto por campo. open lee keys, luego keyEnvs y después keyFiles. Prefiera stopOnError: true; con false, un éxito posterior puede ocultar un error anterior. Los scripts JSON no admiten comandos del planificador.

{
  "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--sourceCarpeta para empaquetar y cifrar.
output / outputContainerPath--outputRuta de salida de .lbx.
masterPassword--masterContraseña maestra en línea.
masterPasswordEnv--master-envLeer la contraseña maestra desde la variable de entorno.
masterPasswordFile--master-fileLeer la contraseña maestra desde un archivo de texto UTF-8.
layers[].algorithm + layers[].key--layerAgregar ALGORITHM=KEY.
layers[].algorithm + layers[].keyEnv--layer-envAgregar ALGORITHM=ENV.
layers[].algorithm + layers[].keyFile--layer-fileAgregar ALGORITHM=FILE.
compression / compress--compressHabilitar compresión.
padding--paddingAgregar relleno aleatorio cifrado. Unidades: B, KB, MB, GB, TB.
paddingBytes--padding-bytesTamaño del relleno en bytes sin procesar.
split / splitSize--splitDividir la salida en .lbx, .lbx1, .lbx2.
splitPartSizeBytes--split-bytesTamaño de la parte dividida en bytes sin procesar.
destructionPassword--destruction-passwordContraseña de destrucción solo Max en línea. Ingresarla más tarde como contraseña maestra sobrescribe inmediatamente el contenedor.
destructionPasswordEnv--destruction-password-envLeer la contraseña de destrucción solo Max desde una variable de entorno.
destructionPasswordFile--destruction-password-fileLeer la contraseña de destrucción solo Max desde un archivo de texto UTF-8.
deleteSource / deleteSourceFolderAfterSuccess--delete-sourceEliminar la carpeta de origen después de la creación manual exitosa.
container / containerPath--containerContenedor .lbx existente.
keys[]--keyClave de capa en línea en el orden original.
keyEnvs[]--key-envClave de capa desde variable de entorno.
keyFiles[]--key-fileClave de capa desde archivo de texto UTF-8.

Recetas de automatización

Copia de seguridad de volcado de base de datos cifrada

$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

Protección de artefactos 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

Transferencia segura a socios

.\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

Archivo a largo plazo

.\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

Ejemplo de archivo por lotes

@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: copiar varias carpetas

Guarde el script en la ruta indicada. Crea un contenedor con nombre único y un registro por origen, se detiene ante errores y conserva el código de salida CLI. AES-128-GCM funciona en Free; la compresión y división requieren Pro o 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: copias sin intervención

Guarde el script Bash con finales de línea LF. Prepare la CLI y los secretos en las rutas indicadas y pase las carpetas de origen como argumentos. Cada ejecución tiene su propio directorio. Los errores dejan un registro y devuelven un código distinto de cero; los originales se conservan.

/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

Programar con el sistema operativo

Estas tareas ejecutan los scripts anteriores; este uso de create no requiere Max. El registro de Windows necesita una sesión iniciada; configure la ejecución sin sesión en el Programador si la necesita. Añada cron al crontab del usuario de copias tras comprobar flock. Ambos ejemplos se ejecutan a las 02:00 locales y evitan ejecuciones programadas simultáneas. Revise permisos y pruebe manualmente.

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: administrar el planificador

Cree la cuenta de servicio lockbox con los permisos necesarios, active Max para ella y prepare un archivo UTF-8 independiente jobs.txt con la contraseña. add añade, no actualiza: úselo una vez por tarea. Mantenga un proceso por archivo de tareas y reinícielo tras modificarlo. El JSON de estado no restaura el historial: omite las repeticiones vencidas, pero una tarea once vencida puede ejecutarse otra vez. Para lanzamientos periódicos del sistema use create en lugar de repetir run-once. El planificador reutiliza el nombre de salida.

/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

Referencia de comandos

ComandoPropósitoAlias
helpMostrar ayuda de la consola.--help, -h, ?
device-idImprimir ID del dispositivo PC para emisión de licencia.deviceid, machine-id
licenseMostrar edición actual y ruta de la licencia.license-status, status
activateInstalar una clave de licencia vinculada al dispositivo.activation
algorithmsListar algoritmos y ediciones mínimas.profiles, list-algorithms
keygenGenerar claves aleatorias.generate-key, generate-keys
createCrear contenedor cifrado.encrypt
openExtraer contenedor cifrado.decrypt, extract
scheduleAdministrar y ejecutar tareas programadas.scheduler, scheduled-tasks
scriptEjecutar archivo de automatización JSON.--script

Crear opciones

--source, -sCarpeta para empaquetar y cifrar.
--output, -oRuta de salida de .lbx.
--masterContraseña maestra en línea.
--master-envLeer la contraseña maestra desde la variable de entorno.
--master-fileLeer la contraseña maestra desde un archivo de texto UTF-8.
--layerAgregar ALGORITHM=KEY.
--layer-envAgregar ALGORITHM=ENV.
--layer-fileAgregar ALGORITHM=FILE.
--algorithm, -aForma de algoritmo alternativa emparejada con --key, --key-env, o --key-file.
--compressHabilitar compresión.
--no-compressDeshabilitar compresión si se configuró anteriormente.
--paddingAgregar relleno aleatorio cifrado. Unidades: B, KB, MB, GB, TB.
--padding-bytesTamaño del relleno en bytes sin procesar.
--splitDividir la salida en .lbx, .lbx1, .lbx2.
--split-bytesTamaño de la parte dividida en bytes sin procesar.
--no-splitDeshabilitar división si se configuró anteriormente.
--destruction-passwordContraseña de destrucción solo Max en línea. Ingresarla más tarde como contraseña maestra sobrescribe inmediatamente el contenedor.
--destruction-password-envLeer la contraseña de destrucción solo Max desde una variable de entorno.
--destruction-password-fileLeer la contraseña de destrucción solo Max desde un archivo de texto UTF-8.
--delete-sourceEliminar la carpeta de origen después de la creación manual exitosa.

Opciones de apertura

--container, -cContenedor .lbx existente.
--output, -oCarpeta de extracción.
--master, --master-env, --master-fileFuente de la contraseña maestra.
--key, -kClave de capa en línea en el orden original.
--key-envClave de capa desde variable de entorno.
--key-fileClave de capa desde archivo de texto UTF-8.
Permitido para flujos de trabajo con contraseña de destrucción. La extracción normal falla después de leer los metadatos si faltan claves necesarias.

Opciones del planificador

schedule addAgregar una tarea a .lbxjobs cifrada.
schedule listMostrar tareas guardadas.
schedule runEjecutar trabajador de larga duración.
schedule run-onceEjecutar tareas pendientes una vez y salir.
schedule statusLeer JSON con el estado de ejecución más reciente.
--tasks, --fileRuta del archivo de tareas cifrado.
--password, --password-env, --password-fileContraseña para el archivo de tareas.
--state, --status-fileRuta del JSON de estado de ejecución.
--nameNombre de la tarea para schedule add.
--frequency, --everyFrecuencia de la tarea.
--start, --start-atFecha/hora de inicio local.
--delete-source-contentsEliminar el contenido de la carpeta de origen original después de una ejecución programada exitosa.
--poll-secondsIntervalo de sondeo del trabajador para schedule run.

Use --language o --lang para elegir el idioma de la consola y --quiet para ocultar el progreso habitual; los errores siguen apareciendo en la salida de error estándar. Ctrl+C solicita la cancelación y devuelve el código 1. El código 2 indica sintaxis incorrecta y el código 3 una función de creación no disponible en la edición actual. El código 0 también se devuelve al activar intencionadamente la contraseña de destrucción, por lo que no demuestra por sí solo que se extrajeran archivos. Verifique el resultado esperado antes de continuar la automatización.

Códigos de salida y supervisión

schedule run-once puede devolver cero aunque falle una tarea; schedule status también cuando no hay estado. Compruebe savedAt, lastSuccessAt y lastError; [OK] puede significar solo Ready. Este monitor espera copias diarias, consultas cada 30 segundos y un éxito en las últimas 26 horas. Ajuste los umbrales. Los estados JSON son numéricos; --quiet suprime la salida habitual de create/open correctos.

$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

Solución de problemas

¿Por qué obtengo el código de salida 3?

La edición actual no permite la función solicitada: demasiadas capas, compresión, padding criptográfico, división, planificador o un algoritmo más fuerte.

¿Por qué falla la extracción con un error de etiqueta de autenticación?

La contraseña maestra, la clave de capa, el orden de las capas o el archivo contenedor son incorrectos. Para contenedores divididos, también verifique que cada parte esté presente en la misma carpeta.

¿Por qué el planificador no se ejecuta después de cerrar la consola?

schedule run es el proceso trabajador. Manténgalo abierto o ejecútelo desde el Programador de tareas de Windows o un envolvente de servicio.

¿Por qué falla inmediatamente la adición de programación?

El planificador valida licencia, carpeta fuente, ruta de salida, algoritmos, contraseñas y espacio en disco disponible antes de guardar la tarea.

¿Puedo almacenar contraseñas del planificador dentro del archivo .lbxjobs?

Sí. El archivo .lbxjobs está encriptado con la contraseña del archivo del planificador y almacena todos los metadatos de la tarea, incluidas las contraseñas de cifrado y las claves de capa.

¿Qué sucede si una ejecución programada se superpone con la ejecución anterior?

El nuevo evento se omite, la tarea reporta un estado fallido con una explicación y las ejecuciones futuras continúan después de que la ejecución activa termine.

¿Cómo evito que los secretos queden en el historial de la shell?

Use --master-env, --master-file, --layer-env, --layer-file, --destruction-password-env, --destruction-password-file, --password-env y --password-file.