Aller au contenu

Lire un secret du coffre

Le parc a deux coffres, et la première question est de savoir lequel interroger. Le critère, c'est qui tape le secret :

Le secret est… Coffre Outils
un secret machine : clé d'API, mot de passe de service, jeton, clé SSH d'hôte OpenBao, sur sa propre machine (pi-bao) bao-get · bao-put
un secret humain : compte web, code de secours, appareil personnel Vaultwarden bws

Ce partage date du 2026-09-27. Avant, tout vivait dans Vaultwarden : une note ou un script plus ancien qui y cherche une clé d'API décrit l'avant. Un garde refuse désormais d'y créer une entrée qui a la forme d'un secret machine.

Secret machine — OpenBao

# noms des clés d'un chemin (jamais les valeurs)
bao-get <hôte>/<stack> --keys

# lire une valeur, et la déplacer sans jamais l'afficher
bao-get <hôte>/<stack> <CLÉ> | ssh -p <port-ssh> <user>@<hôte> 'script-qui-lit-stdin'

# écrire : la valeur arrive sur stdin, jamais en argument
printf '%s' "$VALEUR" | bao-put <hôte>/<stack> <CLÉ> --maintenant

Le chemin machines/<hôte>/<stack> est le miroir du fichier de secrets chiffré du stack. Un synchroniseur le fait descendre jusqu'au conteneur toutes les cinq minutes (--maintenant le fait tout de suite), et fait remonter dans OpenBao toute modification faite directement dans le fichier chiffré. Au démarrage, les hôtes ne contactent jamais le coffre : ils lisent leur copie locale, si bien qu'un coffre éteint n'empêche aucun service de redémarrer.

Aucun geste humain n'est requis sur un secret machine. Lire, écrire et faire tourner une clé se fait sans demander.

Secret humain — Vaultwarden

Le coffre est déjà déverrouillé : un service entretient la session dans ~/.cache/bw/session.

# 1. trouver l'identifiant de l'entrée — TOUJOURS filtrer
~/bin/bws list items --search <motif> | jq -r '.[] | "\(.id)  \(.name)"'

# 2. lire la valeur, par un tube
~/bin/bws get password <identifiant> | <consommateur-qui-lit-stdin>

Ne jamais lancer bw unlock

Sans terminal interactif, la commande bloque jusqu'à expiration — et le coffre était déjà ouvert. C'est du temps perdu sur un problème qui n'existe pas.

bws list sans filtre rend l'objet complet, mot de passe inclus

D'où le jq de l'étape 1. Ce n'est pas du confort d'affichage : c'est ce qui évite d'imprimer tous les mots de passe correspondant au motif.

Deux échecs se déguisent en « coffre verrouillé » :

  1. ~/.bwsession n'existe plus (supprimé le 2026-08-20). C'était un cache orphelin figé sur une session de juin, que plusieurs sessions ont réclamé tour à tour pendant que le service, lui, écrivait dans ~/.cache/bw/session.
  2. bw invoqué sans chemin absolu échoue en contexte systemd : le PATH d'une unité ne contient pas ~/.npm-global/bin. Le command not found est avalé, et l'appelant conclut « coffre verrouillé » sur un coffre ouvert.

Ce que les deux coffres partagent

La valeur passe par un tube, jamais par l'écran, un argument de commande ou une variable affichée : elle ne traverse ni le contexte de l'agent, ni le journal de session, ni la liste des processus.

Un secret s'enregistre dès qu'il est installé, dans la même session, pas plus tard. Un secret qui vit uniquement dans un .env sur un hôte est un secret que personne ne retrouvera le jour où l'hôte tombe.

Dernière vérification de cette page : 2026-10-06