Retour à LockBox

Documentation LockBox CLI

LockBox CLI est la version d'automatisation en anglais uniquement pour le chiffrement scripté, l'extraction, l'activation, les sauvegardes chiffrées planifiées et les flux de travail CI/CD. Il utilise le même modèle de licence lié à l'appareil que l'application de bureau.

Démarrage rapide

Placez LockBox.Cli.exe dans un dossier inclus dans PATH, ou appelez-le par chemin complet. Le marqueur --cli est accepté pour la compatibilité mais n'est pas requis dans la version CLI uniquement.

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

Flux de travail minimal pour créer et ouvrir :

$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 utilise les mêmes commandes avec des chemins slash et un binaire sans le suffixe .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

Installer et vérifier la CLI

Extrayez le ZIP adapté au système et au processeur. .NET est inclus. Comparez le hachage avec SHA256SUMS.txt. Placez la CLI au chemin absolu indiqué ci-dessous et vérifiez l’aide et la licence avec le compte de sauvegarde.

Linux nécessite aussi les dépendances natives de la distribution, dont ICU et OpenSSL ; le .NET inclus ne les fournit pas. Sous Windows, la stratégie d’exécution effective doit autoriser les 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

Dossiers, chemins et espace disque

Adaptez les chemins. Le dossier source doit être non vide et le conteneur doit rester en dehors. Réutiliser le nom de sortie remplace le conteneur et ses parties. Prévoyez l’espace temporaire près du conteneur et une copie source pour les tâches planifiées. Les unités sont basées sur 1024 ; le remplissage ajoute des octets.

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

Préparer les fichiers de secrets

Générez les secrets une seule fois, sauvegardez-les de façon protégée et limitez l’accès aux fichiers. Les exemples refusent de remplacer des clés existantes. Les fichiers UTF-8 conservent les espaces, mais pas les sauts de ligne finaux. Gardez les clés d’origine pour les anciennes sauvegardes.

$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

Activation et état de la licence

La clé de licence est liée à l'ID de l'appareil imprimé par la même version CLI. Si une licence est copiée sur un autre PC, LockBox la rejette et revient à la version gratuite.

Windows vérifie les emplacements existants des données de l'application LockBox. Linux stocke l'activation dans $XDG_CONFIG_HOME/lockbox/.lockbox.license, puis ~/.config/lockbox/.lockbox.license, avec ~/.lockbox/.lockbox.license comme solution de secours.

Obtenir l'ID de l'appareil

.\LockBox.Cli.exe device-id

Vérifier l'édition actuelle

.\LockBox.Cli.exe license

Activer à partir d'un fichier de licence

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

Activer à partir d'une variable d'environnement

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

Activation en ligne

L'activation en ligne fonctionne, mais elle peut se retrouver dans l'historique du shell ou les journaux de processus.

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

Activation sous Linux

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

Gestion des secrets

Préférez les variables d'environnement ou les fichiers. Les secrets intégrés sont utiles uniquement pour les tests. Les mots de passe maîtres et les clés de couche doivent être conservés : sans eux, le conteneur ne peut pas être ouvert.

ObjetIntégréEnvironnementFichier
Mot de passe maître--master value--master-env ENV--master-file path
Créer une clé de couche--layer ALG=KEY--layer-env ALG=ENV--layer-file ALG=FILE
Ouvrir une clé de couche--key value--key-env ENV--key-file path
Mot de passe du fichier de planification--password value--password-env ENV--password-file path
Mot de passe de destruction du conteneur--destruction-password value--destruction-password-env ENV--destruction-password-file path
Clé de licence--license value--license-env ENV--license-file path

Secrets basés sur des fichiers

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

Algorithmes et génération de clés

Utilisez algorithms pour voir tous les profils pris en charge et les éditions minimales. Utilisez keygen pour les clés de couche.

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

Alias de commande pris en charge :

algorithms
list-algorithms
profiles

keygen
generate-key
generate-keys

Créer des conteneurs

create empaquette un dossier source, applique éventuellement une compression et un remplissage, crypte la charge utile à travers une ou plusieurs couches, et écrit un conteneur .lbx.

Options requises

  • --source ou -s : dossier source.
  • --output ou -o : chemin de sortie du .lbx.
  • --master, --master-env, ou --master-file.
  • Au moins une couche : --layer, --layer-env, ou --layer-file.

Conteneur AES minimal

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

Conteneur compressé

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

Remplissage cryptographique

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

Diviser le conteneur en parties

.\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 première partie conserve .lbx. Les parties supplémentaires utilisent .lbx1, .lbx2, et ainsi de suite. Gardez toutes les parties dans le même dossier.

Exemple Max à neuf couches

$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

Syntaxe alternative pour algorithme/clé

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

Supprimer la source après création manuelle réussie

.\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 supprime le dossier source uniquement après que le conteneur a été créé avec succès. Le planificateur a une option différente : --delete-source-contents.

Mot de passe de destruction du conteneur

Max edition peut ajouter un mot de passe de destruction séparé à un conteneur. Si ce mot de passe est saisi plus tard comme mot de passe principal, LockBox écrase immédiatement le conteneur sans confirmation. Cela est destiné aux scénarios de pression par contrainte. Gardez-le séparé du vrai mot de passe principal.

La commande vérifie l'espace disque libre, chiffre les données du conteneur original avec un secret aléatoire et AES-256-GCM dans un fichier temporaire, normalise le résultat à la taille exacte de l'original, remplace le fichier original et oublie le secret aléatoire. Pour les conteneurs fractionnés, chaque partie .lbx, .lbx1, .lbx2 dans le même dossier est remplacée tout en préservant les tailles des parties originales.

Créer avec un mot de passe de destruction

$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

Déclencher la destruction sans clés de couche

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

Déclenchement sous Linux

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

Après une destruction réussie, le conteneur n'est plus un fichier LockBox valide. Le CLI renvoie le code de sortie 0 car l'action de destruction demandée a été effectuée avec succès.

Ouvrir des conteneurs

open extrait un conteneur dans le dossier de sortie. Pour une extraction normale, les clés de couche doivent être fournies dans le même ordre utilisé lors de la création. Pour un flux de travail avec mot de passe de destruction, seuls le chemin du conteneur, le chemin de sortie et le mot de passe de destruction comme mot de passe principal sont requis.

Ouvrir un conteneur à une couche

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

Ouvrir un conteneur fractionné

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

Ouvrir un conteneur multi-couches

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

Vérifier une sauvegarde par restauration

Créez un petit fichier report.csv pour le test. Extrayez vers un nouveau dossier, qui conserve le nom du dossier source. Gardez toutes les parties ensemble et comparez aux sources inchangées. L’extraction exige un espace temporaire accessible en écriture près du conteneur. Protégez aussi les fichiers restaurés en clair.

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

Planificateur

Les commandes du planificateur sont disponibles dans l'édition Max. Elles stockent les métadonnées complètes des tâches dans un fichier .lbxjobs chiffré, y compris le chemin source, le chemin de sortie, les mots de passe, le mot de passe de destruction, les clés de couche, la compression, le remplissage, la division, et le paramètre de suppression du contenu source.

Les tâches planifiées ne s'exécutent que lorsque LockBox.Cli.exe schedule run est en cours d'exécution. Utilisez le Planificateur de tâches Windows, systemd de Linux, cron, un wrapper de service, ou une session console longue si vous avez besoin que le worker démarre automatiquement après un redémarrage.

Valeurs de fréquence

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

Ajouter une tâche de sauvegarde quotidienne chiffrée

$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

Ajouter une tâche qui supprime le contenu du dossier source après succès

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

Ajouter un archivage mensuel avec remplissage et parties fractionnées

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

Lister les tâches enregistrées

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

Exécuter le worker du planificateur

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

Exécuter une fois les tâches dues et quitter

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

Afficher le dernier état d'exécution

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

Les marqueurs de statut sont [OK], [RUNNING], et [FAILED]. Une tâche échouée inclut la raison et indique à l'utilisateur de contacter le support si le problème se répète.

Scripts JSON

Utilisez --script lorsqu'un flux de travail comporte plusieurs étapes. Le lanceur de scripts prend en charge create, open, keygen, algorithms, device-id, license, et activate.

Créer et ouvrir dans un seul 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"

Continuer après une étape échouée

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

Activer depuis un script

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

Champs JSON et règles d’exécution

Le tableau relie les champs create et les tableaux de clés open aux options CLI. Les chemins relatifs partent du répertoire de travail du processus ; variables et dates ne sont pas substituées. Utilisez une source de secret par champ. open lit keys, puis keyEnvs, puis keyFiles. Préférez stopOnError: true ; avec false, un succès ultérieur peut masquer un échec. Les commandes de planification ne sont pas prises en charge dans les scripts 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--sourceDossier à empaqueter et chiffrer.
output / outputContainerPath--outputChemin de sortie .lbx.
masterPassword--masterMot de passe maître en ligne.
masterPasswordEnv--master-envLire le mot de passe maître depuis une variable d'environnement.
masterPasswordFile--master-fileLire le mot de passe maître depuis un fichier texte UTF-8.
layers[].algorithm + layers[].key--layerAjouter ALGORITHM=KEY.
layers[].algorithm + layers[].keyEnv--layer-envAjouter ALGORITHM=ENV.
layers[].algorithm + layers[].keyFile--layer-fileAjouter ALGORITHM=FILE.
compression / compress--compressActiver la compression.
padding--paddingAjouter un bourrage aléatoire chiffré. Unités : B, KB, MB, GB, TB.
paddingBytes--padding-bytesTaille du bourrage en octets bruts.
split / splitSize--splitDiviser la sortie en .lbx, .lbx1, .lbx2.
splitPartSizeBytes--split-bytesTaille des parties divisées en octets bruts.
destructionPassword--destruction-passwordMot de passe de destruction Max-only en ligne. Le saisir plus tard comme mot de passe maître écrase immédiatement le conteneur.
destructionPasswordEnv--destruction-password-envLire le mot de passe de destruction Max-only depuis une variable d'environnement.
destructionPasswordFile--destruction-password-fileLire le mot de passe de destruction Max-only depuis un fichier texte UTF-8.
deleteSource / deleteSourceFolderAfterSuccess--delete-sourceSupprimer le dossier source après une création manuelle réussie.
container / containerPath--containerConteneur .lbx existant.
keys[]--keyClé de couche en ligne dans l'ordre original.
keyEnvs[]--key-envClé de couche depuis la variable d'environnement.
keyFiles[]--key-fileClé de couche depuis un fichier texte UTF-8.

Recettes d'automatisation

Sauvegarde de la base de données chiffrée

$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

Protection des artefacts 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

Transfert sécurisé avec un partenaire

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

Archivage à long terme

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

Exemple de fichier batch

@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 : sauvegarder plusieurs dossiers

Enregistrez le script au chemin indiqué. Il crée un conteneur au nom unique et un journal par source, s’arrête en cas d’erreur et transmet le code de sortie CLI. AES-128-GCM fonctionne avec Free ; compression et découpage nécessitent Pro ou 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 : sauvegardes sans intervention

Enregistrez le script Bash avec des fins de ligne LF. Préparez la CLI et les secrets aux chemins indiqués, puis passez les dossiers sources en arguments. Chaque exécution dispose de son dossier. Les erreurs produisent un journal et un code non nul ; les sources sont conservées.

/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

Planifier avec le système d’exploitation

Ces tâches lancent les scripts précédents ; cet usage de create ne nécessite pas Max. L’inscription Windows exige une session ouverte ; configurez le mode déconnecté dans le Planificateur si nécessaire. Ajoutez cron au crontab du compte de sauvegarde après avoir vérifié flock. Les deux exemples s’exécutent à 02:00 locale et évitent les exécutions planifiées simultanées. Vérifiez les droits et testez manuellement.

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 : exploiter le planificateur

Créez le compte de service lockbox avec les droits nécessaires, activez Max pour ce compte et préparez le fichier de mot de passe UTF-8 distinct jobs.txt. add ajoute sans mettre à jour : une seule fois par tâche. Utilisez un processus par fichier de tâches et redémarrez-le après modification. Le JSON d’état ne restaure pas l’historique : les occurrences périodiques échues sont sautées, une tâche once échue peut être rejouée. Pour les lancements périodiques du système, utilisez create plutôt que run-once répété. Le planificateur réutilise le nom de sortie.

/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

Référence des commandes

CommandeObjectifAlias
helpAfficher l'aide de la console.--help, -h, ?
device-idImprimer l'ID de l'appareil PC pour l'émission de licence.deviceid, machine-id
licenseAfficher l'édition actuelle et le chemin de la licence.license-status, status
activateInstaller une clé de licence liée à l'appareil.activation
algorithmsLister les algorithmes et les éditions minimales.profiles, list-algorithms
keygenGénérer des clés aléatoires.generate-key, generate-keys
createCréer un conteneur chiffré.encrypt
openExtraire un conteneur chiffré.decrypt, extract
scheduleGérer et exécuter les tâches planifiées.scheduler, scheduled-tasks
scriptExécuter un fichier d'automatisation JSON.--script

Créer des options

--source, -sDossier à empaqueter et chiffrer.
--output, -oChemin de sortie .lbx.
--masterMot de passe maître en ligne.
--master-envLire le mot de passe maître depuis une variable d'environnement.
--master-fileLire le mot de passe maître depuis un fichier texte UTF-8.
--layerAjouter ALGORITHM=KEY.
--layer-envAjouter ALGORITHM=ENV.
--layer-fileAjouter ALGORITHM=FILE.
--algorithm, -aForme d'algorithme alternative associée à --key, --key-env, ou --key-file.
--compressActiver la compression.
--no-compressDésactiver la compression si elle avait été activée précédemment.
--paddingAjouter un bourrage aléatoire chiffré. Unités : B, KB, MB, GB, TB.
--padding-bytesTaille du bourrage en octets bruts.
--splitDiviser la sortie en .lbx, .lbx1, .lbx2.
--split-bytesTaille des parties divisées en octets bruts.
--no-splitDésactiver la division si elle avait été activée précédemment.
--destruction-passwordMot de passe de destruction Max-only en ligne. Le saisir plus tard comme mot de passe maître écrase immédiatement le conteneur.
--destruction-password-envLire le mot de passe de destruction Max-only depuis une variable d'environnement.
--destruction-password-fileLire le mot de passe de destruction Max-only depuis un fichier texte UTF-8.
--delete-sourceSupprimer le dossier source après une création manuelle réussie.

Options d'ouverture

--container, -cConteneur .lbx existant.
--output, -oDossier d'extraction.
--master, --master-env, --master-fileSource du mot de passe maître.
--key, -kClé de couche en ligne dans l'ordre original.
--key-envClé de couche depuis la variable d'environnement.
--key-fileClé de couche depuis un fichier texte UTF-8.
Autorisé pour les flux de travail avec mot de passe de destruction. L'extraction normale échoue après la lecture des métadonnées si les clés requises sont manquantes.

Options du planificateur

schedule addAjouter une tâche à .lbxjobs chiffré.
schedule listAfficher les tâches enregistrées.
schedule runExécuter un travailleur de longue durée.
schedule run-onceExécuter les tâches dues une seule fois et quitter.
schedule statusLire le dernier statut d'exécution JSON.
--tasks, --fileChemin du fichier de tâche chiffré.
--password, --password-env, --password-fileMot de passe pour le fichier de tâches.
--state, --status-fileChemin du JSON du statut d'exécution.
--nameNom de la tâche pour schedule add.
--frequency, --everyFréquence de la tâche.
--start, --start-atDate/heure de début locale.
--delete-source-contentsSupprimer le contenu du dossier source original après une exécution programmée réussie.
--poll-secondsIntervalle de sondage du travailleur pour schedule run.

Utilisez --language ou --lang pour choisir la langue de la console et --quiet pour masquer la progression habituelle ; les erreurs restent dans le flux d’erreur standard. Ctrl+C demande l’annulation avec le code 1. Le code 2 signale une syntaxe invalide et le code 3 une fonction de création indisponible dans l’édition actuelle. Le code 0 couvre aussi le déclenchement volontaire du mot de passe de destruction et ne prouve donc pas à lui seul que des fichiers ont été extraits. Vérifiez la sortie attendue avant la suite de l’automatisation.

Codes de sortie et surveillance

schedule run-once peut renvoyer zéro malgré une tâche échouée ; schedule status aussi en l’absence d’état. Vérifiez savedAt, lastSuccessAt et lastError ; [OK] peut simplement signifier Ready. Ce moniteur attend des sauvegardes quotidiennes, une interrogation toutes les 30 secondes et un succès depuis moins de 26 heures. Adaptez les seuils. Les états JSON sont numériques ; --quiet supprime les sorties ordinaires de create/open réussis.

$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

Dépannage

Pourquoi est-ce que j'obtiens le code de sortie 3 ?

L'édition actuelle ne permet pas la fonctionnalité demandée : trop de couches, compression, remplissage crypto, division, planificateur, ou un algorithme plus fort.

Pourquoi l'extraction échoue-t-elle avec une erreur de tag d'authentification ?

Le mot de passe maître, la clé de couche, l'ordre des couches ou le fichier conteneur est incorrect. Pour les conteneurs divisés, vérifiez également que chaque partie est présente dans le même dossier.

Pourquoi le planificateur ne fonctionne-t-il pas après la fermeture de la console ?

schedule run est le processus worker. Gardez-le ouvert, ou lancez-le depuis le Planificateur de tâches Windows ou un wrapper de service.

Pourquoi l'ajout au planificateur échoue-t-il immédiatement ?

Le planificateur valide la licence, le dossier source, le chemin de sortie, les algorithmes, les mots de passe et l'espace disque disponible avant d'enregistrer la tâche.

Puis-je stocker les mots de passe du planificateur dans le fichier .lbxjobs ?

Oui. Le fichier .lbxjobs est chiffré avec le mot de passe du fichier du planificateur et stocke toutes les métadonnées de la tâche, y compris les mots de passe de chiffrement et les clés de couche.

Que se passe-t-il si une exécution planifiée chevauche l'exécution précédente ?

Le nouvel événement est ignoré, la tâche rapporte un statut d'échec avec une explication, et les exécutions futures continuent après la fin de l'exécution en cours.

Comment éviter de laisser des secrets dans l'historique du shell ?

Utilisez --master-env, --master-file, --layer-env, --layer-file, --destruction-password-env, --destruction-password-file, --password-env, et --password-file.