Pourquoi migrer vers Vaultwarden self-hosted
Bitwarden a augmenté ses tarifs d'environ 98 % début 2026 sur les plans individuels et famille. Cette hausse a rendu la question du coût concrète pour un outil qui, jusqu'alors, restait acceptable. Mais le coût n'est pas la seule raison de migrer.
Vaultwarden est une réécriture en Rust du serveur Bitwarden. Elle expose la même API que le service officiel, ce qui signifie que tous les clients Bitwarden — extension navigateur, application mobile, CLI — fonctionnent sans aucune modification, simplement en pointant vers votre propre domaine. Les coffres d'équipe, les organisations, les collections, le TOTP et l'authentification à deux facteurs sont disponibles sur l'instance self-hosted, alors qu'ils sont réservés aux plans payants sur le service cloud officiel.
Autorisez-vous à vérifier cette information sur github.com/dani-garcia/vaultwarden : le projet compte plus de 40 000 étoiles et une communauté active, avec des discussions de migration régulières dont un fil de 200+ commentaires ouvert en 2026 sur les techniques d'export/import.
Ce que Vaultwarden apporte par rapport au cloud Bitwarden
- Coût mensuel fixe : celui de votre VPS, pas un abonnement par utilisateur ou par fonctionnalité.
- Coffres d'organisation et collections sans surcoût : disponibles dès l'installation, pas réservés à un plan premium.
- TOTP intégré : codes d'authentification à deux facteurs stockés dans Vaultwarden, sans plan Bitwarden Premium.
- Données sur votre infrastructure : aucun tiers n'a accès à votre coffre chiffré ni aux journaux de connexion.
- Compatibilité totale avec les clients officiels Bitwarden : aucun changement d'habitude pour vos utilisateurs.
- Consommation très faible : moins de 50 Mo de RAM en état de repos, fonctionne sur le plus petit VPS aux côtés d'autres services.
Prérequis avant de commencer
Vaultwarden déjà déployé. Ce guide couvre uniquement la migration des données. Si votre instance Vaultwarden n'est pas encore en place, commencez par déployer Vaultwarden sur votre VPS : Docker, reverse proxy, SSL et configuration SMTP y sont détaillés.
Bitwarden CLI installé en version récente. La version 2024.x ou supérieure est recommandée. Vérifiez avec bw --version. L'installation se fait via npm install -g @bitwarden/cli ou en téléchargeant le binaire depuis bitwarden.com/help/cli.
SMTP configuré sur Vaultwarden. Les invitations d'organisation nécessitent un serveur SMTP opérationnel. Sans lui, l'étape d'import des organisations échoue silencieusement : les membres invités ne reçoivent pas leur mail et restent bloqués. Les variables d'environnement à vérifier dans votre docker-compose.yml ou votre fichier .env Vaultwarden :
SMTP_HOST=smtp.example.com
[email protected]
SMTP_PORT=587
SMTP_SECURITY=starttls
[email protected]
SMTP_PASSWORD=votremotdepasseUn compte administrateur actif sur votre Vaultwarden. Vous en aurez besoin pour créer manuellement les organisations après import.
Estimation du temps. Comptez 30 à 60 minutes selon le volume de données et le nombre d'organisations. La partie la plus longue est le téléchargement manuel des pièces jointes.
Migrer de Bitwarden cloud vers Vaultwarden : procédure complète
Authentifiez-vous sur Bitwarden cloud avec la CLI
Ouvrez un terminal et connectez-vous à votre compte Bitwarden cloud. La CLI s'authentifie sur le serveur officiel par défaut — ne changez pas encore le
serverpointé, cette commande doit viser le cloud Bitwarden, pas votre Vaultwarden :bw loginSaisissez votre e-mail et mot de passe maître. Si vous avez activé le TOTP ou une clé de sécurité, la CLI vous le demandera. Une fois authentifié, déverrouillez le coffre et exportez la clé de session :
export BW_SESSION=$(bw unlock --raw)Le
--rawest indispensable : sans lui,bw unlockaffiche un texte formaté à plusieurs lignes au lieu de la clé brute, et les commandes suivantes qui utilisent$BW_SESSIONretournent une erreur d'authentification. C'est l'une des erreurs les plus fréquentes dans ce processus.Vérifiez que la session est valide :
bw statusLa réponse doit indiquer
"status": "unlocked".Exportez votre coffre personnel en format Bitwarden JSON
L'export en format JSON natif Bitwarden (format
bitwardenjson) conserve toutes les métadonnées : types d'entrées, champs personnalisés, URIs, notes, TOTP. N'utilisez pas le format CSV, qui perd ces informations.bw export --format bitwardenjson --output ./bitwarden-personal.jsonAttention : Ce fichier ne contient pas vos pièces jointes. C'est la lacune la plus importante de l'export standard. Les pièces jointes doivent être téléchargées séparément, entrée par entrée (étape 4). Notez aussi que les identifiants de carte bancaire, les identités et les notes sécurisées sont inclus dans cet export.
Le fichier JSON est chiffré côté client — il contient vos données en clair (protégées seulement par les droits du fichier). Stockez-le dans un répertoire privé et supprimez-le après l'import.
Exportez chaque organisation séparément
Les données d'organisation ne sont pas incluses dans l'export du coffre personnel. Chaque organisation doit être exportée avec son identifiant propre.
Listez d'abord vos organisations pour récupérer leurs identifiants :
bw list organizationsPour chaque organisation affichée, notez son
idet exportez-la :bw export --organizationid <id-de-lorganisation> --format bitwardenjson --output ./bitwarden-org-<nom>.jsonRépétez cette commande pour chaque organisation. Si vous avez trois organisations, vous obtiendrez trois fichiers JSON distincts.
Si la commande retourne une erreur de permission, vérifiez que vous êtes bien propriétaire ou administrateur de l'organisation dans l'interface web Bitwarden. Un membre sans droits d'export ne peut pas utiliser cette commande.
Téléchargez les pièces jointes
C'est l'étape que la plupart des guides passent sous silence. L'export JSON liste les entrées mais ne contient pas les fichiers attachés — ni leur contenu, ni même leur nom.
Pour chaque entrée qui possède une pièce jointe, utilisez la commande
bw get attachment:bw list items | jq '.[] | select(.attachments != null) | {id, name, attachments}'Cette commande liste les entrées avec des pièces jointes. Pour chaque pièce jointe, téléchargez-la en précisant l'identifiant de l'item et le nom du fichier :
bw get attachment <nom-du-fichier> --itemid <id-de-lentree> --output ./attachments/Remplacez
<nom-du-fichier>par le nom exact de la pièce jointe tel qu'il apparaît dans la liste JSON, et<id-de-lentree>par l'idde l'entrée Bitwarden correspondante.Si vous avez beaucoup de pièces jointes, ce script en bash automatise le téléchargement :
mkdir -p ./attachments bw list items | jq -c '.[] | select(.attachments != null)' | while read item; do ITEM_ID=$(echo $item | jq -r '.id') ITEM_NAME=$(echo $item | jq -r '.name') echo $item | jq -c '.attachments[]' | while read att; do ATT_ID=$(echo $att | jq -r '.id') ATT_NAME=$(echo $att | jq -r '.fileName') bw get attachment "$ATT_NAME" --itemid "$ITEM_ID" --output "./attachments/${ITEM_ID}_${ATT_NAME}" done doneNote :
jqdoit être installé sur votre machine (apt install jqoubrew install jq).Importez dans Vaultwarden
Redirigez d'abord la CLI vers votre instance Vaultwarden. C'est l'opération irréversible de cette procédure : la CLI ne peut pointer que vers un serveur à la fois.
bw config server https://vault.votredomaine.comAuthentifiez-vous sur Vaultwarden :
bw logout bw login export BW_SESSION=$(bw unlock --raw)Importez le coffre personnel :
bw import bitwardenjson ./bitwarden-personal.jsonPour les organisations, vous devez d'abord créer l'organisation dans l'interface web de Vaultwarden, puis récupérer son identifiant :
bw list organizationsImportez ensuite chaque fichier d'organisation avec l'identifiant nouvellement créé :
bw import bitwardenjson ./bitwarden-org-<nom>.json --organizationid <nouvel-id>Enfin, rattachez manuellement les pièces jointes téléchargées à leur entrée via l'interface web de Vaultwarden : naviguez jusqu'à l'entrée, cliquez sur « Modifier », puis ajoutez la pièce jointe depuis le répertoire
./attachments/.Vérifiez l'import et mettez à jour les clients
Avant de considérer la migration terminée, effectuez ces contrôles :
Dans l'interface web de Vaultwarden, vérifiez :
- le nombre d'entrées correspond à celui de Bitwarden cloud ;
- les champs personnalisés sont présents sur quelques entrées de référence ;
- les codes TOTP fonctionnent (testez un code) ;
- les organisations et leurs collections sont visibles.Sur les clients Bitwarden (extension navigateur, application mobile) :
- déconnectez-vous du compte cloud Bitwarden ;
- dans les paramètres du client, changez l'URL du serveur vershttps://vault.votredomaine.com;
- reconnectez-vous avec les mêmes identifiants.Attendez la synchronisation complète avant de supprimer quoi que ce soit sur l'ancien compte cloud. Gardez l'accès au cloud Bitwarden actif pendant au moins 48 heures après la migration pour pouvoir vérifier en cas de doute.
Configuration post-migration
Sauvegardes automatiques. Contrairement au service cloud, la sauvegarde de votre instance self-hosted est de votre responsabilité. Le fichier de données Vaultwarden est data/db.sqlite3 (ou le répertoire data/ complet). Un cron quotidien suffit :
0 3 * * * tar -czf /backup/vaultwarden-$(date +%Y%m%d).tar.gz /opt/vaultwarden/data/ 2>/dev/nullInvitations d'organisation. Si vous gérez des organisations avec plusieurs membres, chaque membre doit être réinvité depuis l'interface d'administration de Vaultwarden. L'invitation part par e-mail (d'où l'importance du SMTP). Le membre accepte, vous confirmez depuis l'administration. La procédure est identique à celle du cloud Bitwarden.
Authentification à deux facteurs. Configurez le 2FA sur votre compte Vaultwarden self-hosted dès la première connexion. Vaultwarden supporte TOTP, Duo, WebAuthn (clés FIDO2) et e-mail. L'accès à l'interface d'administration (/admin) doit être protégé par un token défini dans ADMIN_TOKEN.
Chiffrez le fichier d'export avant de le stocker
L'export JSON de Bitwarden contient vos mots de passe en clair. Si vous devez conserver ce fichier temporairement (pendant la vérification post-migration), chiffrez-le avec GPG ou avec votre gestionnaire de secrets avant de le mettre sur un disque ou de l'envoyer quelque part :
gpg --symmetric --cipher-algo AES256 bitwarden-personal.json
rm bitwarden-personal.jsonSupprimez le fichier non chiffré immédiatement après. Un fichier JSON Bitwarden oublié dans un dossier temporaire est une faille de sécurité directe.
Dépannage : erreurs fréquentes
Session expirée en cours d'export. Symptôme : Not logged in ou Session key is invalid en milieu de procédure. La session Bitwarden CLI expire après quelques minutes d'inactivité. Solution :
export BW_SESSION=$(bw unlock --raw)Re-exportez la variable à chaque fois que vous reprenez le travail après une pause.
--raw manquant sur bw unlock. Sans --raw, bw unlock affiche un message formaté incluant la commande à exécuter, pas uniquement la clé. Si vous copiez-collez directement dans export BW_SESSION=, vous obtenez une valeur incorrecte et toutes les commandes suivantes retournent une erreur d'authentification. Utilisez toujours bw unlock --raw.
bw export --organizationid retourne You do not have permission. Vous n'êtes pas propriétaire ou administrateur de l'organisation. Dans l'interface web Bitwarden, allez dans les paramètres de l'organisation et vérifiez votre rôle. Seul le propriétaire (Owner) peut exporter.
Import échoue avec already exists. Bitwarden CLI refuse d'écraser des entrées existantes lors d'un import. Si vous relancez un import après une tentative partielle, vous obtiendrez des doublons ou des erreurs. Solution : videz le coffre Vaultwarden via l'interface web (Paramètres → Danger Zone → Purge Vault) avant de relancer l'import.
Les codes TOTP ne fonctionnent pas après import. L'export Bitwarden JSON inclut les seeds TOTP chiffrés. S'ils n'apparaissent pas sur Vaultwarden, vérifiez que vous utilisez le format bitwardenjson (pas csv, qui ne supporte pas le TOTP). Si le problème persiste, re-saisissez manuellement les seeds TOTP depuis vos applications d'authentification d'origine.
Pièces jointes absentes après import. Rappel : l'export JSON standard ne contient pas les pièces jointes. Elles doivent être téléchargées via bw get attachment (étape 4) et re-attachées manuellement via l'interface web de Vaultwarden.
Votre coffre self-hosted est opérationnel
La migration depuis Bitwarden cloud vers Vaultwarden se résume à six étapes si vous avez préparé votre instance et votre SMTP en amont : export personnel, exports par organisation, téléchargement des pièces jointes, reconfiguration de la CLI, imports, vérification.
Les deux points à ne pas négliger sont le format bitwardenjson (pas csv) et l'étape des pièces jointes, qui ne fait partie d'aucun export automatique. Avec cette procédure, aucune donnée ne reste sur les serveurs Bitwarden que vous n'ayez décidé d'y laisser.
Pour aller plus loin sur la sécurisation de votre VPS hébergeant Vaultwarden, consultez la checklist de durcissement Linux et le guide sur les mises à jour automatiques de sécurité.