Перенос базы из KeePass в Bitwarden, LastPass или Vaultwarden укладывается в 20-40 минут и состоит из трёх шагов: экспорт KDBX в промежуточный CSV или JSON, импорт файла в целевое хранилище, удаление промежуточного файла. Прямой импорт KDBX не поддерживает ни одно из трёх хранилищ, этот формат читают только клиенты KeePass и KeePassXC.
Главный риск операции: промежуточный файл. CSV из KeePass содержит логины, пароли, TOTP-секреты и заметки открытым текстом. Такой файл попадает в облачную синхронизацию, в ночной бэкап, в автоматический снимок ZFS на TrueNAS или в историю версий файловой системы, и лежит там месяцами.
Ниже разобраны форматы для KeePass 2.5x, Bitwarden 2026.x, LastPass 4.x и Vaultwarden 1.3x, три пошаговых сценария, слияние баз без дубликатов, очистка секретов и чек-лист валидации. Если вы ещё выбираете целевое хранилище, начните со сравнения классов решений: типы систем хранения паролей, архитектура и критерии выбора.
Что нужно знать перед миграцией: форматы, риски и подготовка
Цепочка всегда одна: источник в KDBX, промежуточный файл в CSV или JSON, импорт в целевое хранилище, проверка, удаление промежуточного файла. Обратной цепочки без промежуточного файла не существует, поэтому безопасность миграции определяется тем, как вы обращаетесь с экспортом.
Какие форматы поддерживает каждое хранилище
| Хранилище | Экспорт | Импорт | KDBX напрямую |
|---|---|---|---|
| KeePass 2.5x | KDBX 4, CSV, KeePass XML, HTML | KDBX, CSV, KeePass XML | Да, родной формат |
| Bitwarden 2026.x | CSV, JSON, зашифрованный JSON | Bitwarden CSV, Bitwarden JSON, LastPass CSV, KeePass 2 XML, 1Password, Chrome | Нет |
| LastPass 4.x | CSV | LastPass CSV, LastPass JSON, Chrome, 1Password | Нет |
| Vaultwarden 1.3x | CSV, JSON, зашифрованный JSON | Bitwarden CSV, Bitwarden JSON, LastPass CSV | Нет |
KDBX 4 шифрует базу целиком (AES-256 или ChaCha20, ключ выводится из мастер-пароля через Argon2d). Ни Bitwarden, ни LastPass, ни Vaultwarden не разбирают этот контейнер, поэтому базу приходится распаковывать в открытый формат. KeePass XML сохраняет группы и типы полей лучше CSV, и Bitwarden умеет его читать напрямую. Vaultwarden работает через тот же API, что и Bitwarden, поэтому список импортёров совпадает: разницы в форматах между облачной и self-hosted версией нет.
Риски промежуточных файлов и почему нельзя пропускать очистку
Экспорт в CSV выгружает пароли, URL, заметки и TOTP-секреты строками. Конкретные каналы утечки, которые встречаются на практике:
- экспорт в /tmp или в домашний каталог, откуда файл попадает в ежедневный бэкап;
- папка Dropbox, OneDrive или Google Drive с автоматической синхронизацией на три устройства;
- автоматические снимки ZFS в TrueNAS и теневые копии Windows (VSS), которые хранят файл после удаления;
- файлы-хвосты редакторов: passwords.csv.swp у Vim, passwords.csv~ у nano и продвинутых редакторов;
- корзина, из которой файл восстанавливается одной командой;
- история команд, если пароль попал в аргумент скрипта обработки CSV.
Правило, которое снимает большую часть рисков: промежуточный файл живёт только на зашифрованном носителе и удаляется сразу после импорта. Второй слой защиты: не открывать CSV в Excel, он создает временные копии в системном каталоге и правит кодировку.
Пошаговый перенос из KeePass в Bitwarden
- Скопируйте файл базы (например, secrets.kdbx) на зашифрованный носитель и проверьте, что база открывается нужным мастер-паролем и key-файлом.
- В KeePass 2.5x откройте File, затем Export, и выберите CSV (или KeePass XML, если нужна иерархия групп).
- Проверьте заголовок файла и состав колонок: Group, Title, Username, Password, URL, Notes, TOTP.
- В веб-интерфейсе Bitwarden откройте Tools, затем Import data, выберите формат, загрузите файл и нажмите Import data.
- Сверьте количество записей, папки, вложения и TOTP-коды.
- Удалите промежуточный файл: shred -u -z -n 3 passwords.csv.
Экспорт из KeePass: CSV или JSON?
Штатного экспорта в JSON у KeePass 2.5x нет: JSON формируют сторонние скрипты и плагины, а Bitwarden принимает только собственный JSON-формат. Выбор сводится к двум вариантам. CSV универсален и подходит LastPass, Bitwarden и Vaultwarden, но теряет вложенные группы, историю паролей и часть пользовательских полей. KeePass XML сохраняет иерархию групп и типы полей, Bitwarden читает его импортёром KeePass 2 XML. KeePassXC 2.7 также умеет экспортировать CSV и XML, логика та же, отличается расположение пунктов меню.
Для простой базы берите CSV. Если в базе больше трёх уровней групп или активно используются дополнительные поля, берите KeePass XML и проверьте результат особенно внимательно.
Импорт в Bitwarden и проверка папок
Bitwarden создаёт папки из колонки folder формата Bitwarden CSV. Колонки KeePass так не называются, поэтому перед импортом либо приведите заголовки вручную, либо используйте импортёр KeePass 2 XML. Соответствие колонок для ручного переименования: Group становится folder, Title становится name, Username становится login_username, Password становится login_password, URL становится login_uri, Notes становится notes, TOTP становится login_totp и favorites не переносится.
Корректная строка Bitwarden CSV выглядит так: folder,title,username,password,url,notes. После импорта проверьте четыре вещи. Количество записей совпадает с источником. Папки созданы и записи лежат в них, а не в общем списке. TOTP-коды отображаются и генерируют те же шестизначные значения. Вложения отсутствуют, через CSV они не переносятся, их добавляют вручную или через прямой перенос файлов.
Пошаговый перенос из KeePass в LastPass
- Сделайте резервную копию KDBX и убедитесь, что она открывается.
- Экспортируйте базу в CSV: File, Export, CSV.
- Приведите заголовки CSV к формату LastPass и проверьте разделитель.
- Войдите в LastPass, откройте More options, затем Advanced, затем Import.
- Выберите LastPass CSV, загрузите файл и запустите импорт.
- Проверьте количество записей, папки и заметки, после чего удалите CSV.
Приведение CSV KeePass к формату LastPass
LastPass ожидает фиксированный набор заголовков. Соответствие колонок KeePass и LastPass:
| KeePass | LastPass |
|---|---|
| Group | grouping |
| Title | name |
| Username | username |
| Password | password |
| URL | url |
| Notes | extra |
| служебный флаг | fav (0 или 1) |
Разделитель зависит от локали системы. KeePass в русской локали нередко выгружает CSV с точкой с запятой, а LastPass читает только запятую. Откройте файл в текстовом редакторе и посмотрите первую строку. Замените все разделители на запятую, следите за полями, внутри которых уже есть запятые: такие поля должны быть в двойных кавычках.
Импорт в LastPass и проверка записей
LastPass требует точного совпадения имён колонок. Лишние колонки он игнорирует, а переименованные ломают импорт целиком или частично. Файл сохраняйте в UTF-8 без BOM. После импорта проверьте количество записей и содержимое поля extra: заметки из KeePass часто содержат переносы строк, и часть клиентов отображает их обрезанными. TOTP-секреты из CSV не переносятся, их придётся заводить заново. KDBX LastPass не читает ни в одной версии 4.x.
Пошаговый перенос из KeePass в Vaultwarden
- Сделайте резервную копию KDBX и проверьте её открытие.
- Экспортируйте базу в CSV или KeePass XML.
- В веб-интерфейсе Vaultwarden откройте Tools, затем Import data, выберите Bitwarden CSV или Bitwarden JSON.
- Загрузите файл и запустите импорт, при необходимости указав коллекцию организации.
- Проверьте записи, папки и коллекции.
- Удалите промежуточный файл с сервера и с рабочей машины.
Особенности импорта в self-hosted Vaultwarden
Vaultwarden повторяет API Bitwarden, поэтому форматы и порядок действий совпадают с облачным сценарием. Отличия практические. Файл уходит на ваш сервер, а не в облако вендора, и это главный аргумент в пользу self-hosted схемы. Импорт в организацию требует прав owner или admin и заранее созданной коллекции. Если Vaultwarden стоит за Nginx, проверьте лимит размера тела запроса (client_max_body_size): база с несколькими тысячами записей легко превышает дефолтные 1 МБ, и импорт падает с ошибкой 413. Соединение обязано идти по HTTPS, иначе CSV с паролями уходит по сети открытым текстом.
Для развёртывания Vaultwarden нужен сервер с Docker и доменом. Подойдёт недорогой VPS: Timeweb Cloud даёт облачные серверы, хранилище и Kubernetes, ресурсы меняются под рост числа пользователей. Не забывайте, что доступность хранилища паролей критична: без сервера команда теряет доступ к секретам, поэтому резервные копии базы Vaultwarden (файл db.sqlite3 и каталог с вложениями) снимайте ежедневно.
Проверка записей и папок после импорта в Vaultwarden
Проверьте количество записей, структуру папок, наличие коллекций и работу TOTP. Если папки не создались, вернитесь к колонке folder в CSV. Вложения через CSV не переносятся: их добавляют вручную или переносят вместе с базой на уровне сервера. Vaultwarden 1.3x читает Bitwarden JSON и сохраняет типы записей (логины, защищённые заметки, карты, идентификаторы), чего CSV не умеет, но такой JSON получают экспортом из другого экземпляра Bitwarden или Vaultwarden.
Слияние баз: как избежать дубликатов, конфликтов и потери записей
Перенос в пустое хранилище - редкий случай. Обычно база команды уже существует, и импорт добавляет записи поверх. Ни Bitwarden, ни LastPass, ни Vaultwarden не дедуплицируют данные при импорте: каждая строка CSV превращается в новую запись. Есть три стратегии слияния. Импорт в пустое хранилище с последующим ручным слиянием, самый безопасный путь. Импорт в рабочее хранилище с последующей чисткой дубликатов, самый быстрый и самый рискованный. Предварительное слияние KDBX в KeePassXC перед экспортом, лучший вариант при нескольких личных базах.
Логика проверки целостности после слияния совпадает с подходами из миграции данных с проверкой целостности: сверяйте количество записей до и после, фиксируйте расхождения и объясняйте каждое.
Дедупликация до импорта: KeePassXC merge
KeePassXC объединяет базы без потери записей: откройте основную базу, выберите Database, затем Merge from database, и укажите вторую базу. Клиент сопоставляет записи по UUID и по совпадению Title с UserName, а расхождения показывает в списке конфликтов. Автоматического удаления дубликатов при слиянии нет: KeePassXC подсвечивает проблемные записи, решение принимаете вы. После слияния экспортируйте итог в CSV и переносите в целевое хранилище.
Что делать с дубликатами после импорта
В Bitwarden и Vaultwarden нет кнопки дедупликации. Отчёты Reports показывают повторно используемые и скомпрометированные пароли, но дубликаты записей не ищут. Рабочий приём: выгрузите хранилище в CSV, отсортируйте строки по паре title и username, затем разберите группы с одинаковыми значениями. Автоматическое удаление по совпадению названия опасно: записи admin в группах Prod и Stage могут содержать разные пароли. Удаляйте только после ручного сравнения полей password и notes. В LastPass встроенной дедупликации тоже нет, разбор такой же.
Откат неудачного импорта
Кнопки отката ни в одном из трёх хранилищ нет. Перед импортом выгрузите текущее состояние целевого хранилища: в Bitwarden и Vaultwarden это зашифрованный JSON через Tools, Export vault, в LastPass это CSV через Advanced, Export. Дальше два пути. Точечный: удалить импортированные записи вручную или пакетно через выделение. Полный: очистить хранилище и импортировать резервную копию заново. При работе с Vaultwarden держите копию файла базы сервера: восстановление из снапшота занимает минуты, повторный импорт в неверном формате может испортить и структуру папок. Резервную копию KDBX не удаляйте до конца проверки.
Безопасная очистка промежуточных файлов и защита секретов
Обычное удаление файла убирает только запись в таблице файловой системы. Содержимое остаётся в свободных блоках и читается утилитами восстановления. Порядок действий: создать файл на зашифрованном носителе, импортировать данные, перезаписать файл, очистить корзину, проверить историю файлов и бэкапы.
Как безопасно удалить CSV на Linux, macOS и Windows
- Linux: shred -u -z -n 3 /path/to/passwords.csv перезаписывает файл трижды и удаляет его после нулевого прохода.
- macOS: srm -vz /path/to/passwords.csv, если пакет srm установлен, иначе rm -P для перезаписи перед удалением.
- Windows: cipher /w:C:\Temp перезаписывает свободное пространство каталога, для выборочного удаления подойдёт Eraser или SDelete.
На SSD перезапись не гарантирует физическое стирание из-за выравнивания износа: контроллер может оставить старые блоки нетронутыми. Основным слоем защиты выбирайте шифрование диска (LUKS, BitLocker, FileVault), тогда удаление ключа делает остатки данных нечитаемыми.
Работа в tmpfs и зашифрованных контейнерах
Файл в /dev/shm живёт в оперативной памяти и исчезает при перезагрузке, на диск он не пишется. Шифрование экспорта добавляет второй барьер: команда gpg -c passwords.csv создаёт passwords.csv.gpg с симметричным ключом, а исходный файл удаляется сразу после этого. Для Windows используйте BitLocker-раздел или контейнер VeraCrypt. Учтите: tmpfs защищает от записи на диск, но не от дампа памяти и не от вредоносного процесса на той же машине. Резервные копии KDBX храните отдельно, схема выгрузки в объектное хранилище разобрана в материале про перенос архивов в S3-хранилища.
Чек-лист валидации переноса и восстановление доступа
- Количество записей в источнике и целевом хранилище совпадает, расхождения объяснены.
- Все папки, группы и коллекции перенесены, записи лежат внутри них.
- TOTP-секреты генерируют корректные коды.
- Вложения перенесены вручную или через серверный перенос.
- Критичные учётные записи проверены тестовым входом.
- Резервная копия KDBX сохранена на зашифрованном носителе.
- Промежуточные CSV и JSON удалены, корзина очищена.
- Мастер-пароль нового хранилища сохранён в аварийном месте.
- Двухфакторная аутентификация включена, резервные коды распечатаны.
- Старая база KeePass не удалена до полной проверки.
Методика сверки данных до и после перехода подробно описана в руководстве по миграции баз данных: план, риски и решения, те же принципы работают и для хранилищ секретов.
Проверка критичных учётных записей
Составьте список из 5-10 записей, потеря которых останавливает работу, и проверьте вход по каждой. Минимальный набор: root или sudo на продовых серверах, панели AWS, GCP и Azure, гипервизор (Proxmox, VMware), банковский кабинет, корпоративная почта, регистратор доменов и DNS, CI/CD (GitLab, Jenkins), админка Vaultwarden, резервные коды 2FA. Если вход не удался, возьмите пароль из старой базы KeePass и перенесите запись вручную. Рассказы о том, что «импорт прошёл успешно», проверкой не заменяются: тестовый вход даёт единственное надёжное подтверждение.
Восстановление доступа при потере пароля от хранилища
Bitwarden: мастер-пароль не восстанавливается, работают recovery code, настроенный заранее, и Emergency Access для доверенного контакта. LastPass: сброс через email возвращает доступ к аккаунту, но данные расшифровываются только мастер-паролем, которого у сервиса нет. Vaultwarden: администратор может сбросить пароль пользователя или отключить 2FA, но не расшифровать хранилище, ключ выводится из мастер-пароля на клиенте. Практика: храните мастер-пароль на бумаге в сейфе и отдельно в другой системе с иным мастер-паролем. Резервные коды 2FA держите вне телефона, подход к их выбору и переносу seed-ключей разобран в материале про автономные 2FA-аутентификаторы.
Типовые ошибки при миграции и как их избежать
- Кодировка Windows-1251 вместо UTF-8: кириллица в названиях превращается в мусор. Сохраняйте файл в UTF-8, проверяйте первую строку.
- BOM в начале файла: Bitwarden читает первую колонку с лишним символом и не находит folder. Пересохраните файл без BOM в Notepad++ или VS Code.
- Точка с запятой вместо запятой в разделителе: импорт падает или создаёт одну гигантскую запись.
- Лишние кавычки и неэкранированные запятые внутри заметок: строка CSV распадается на лишние колонки.
- Импорт в рабочее хранилище без дедупликации: тысячи дубликатов вместо сотни записей.
- Забытые TOTP-секреты: пользователи остаются без второго фактора.
- Неудалённый CSV в облачной папке: экспорт секретов лежит в синхронизации неограниченно долго.
- Вложения, о которых вспомнили после удаления KDBX: восстановить их из CSV невозможно.
- Устаревший клиент KeePass: старые сборки выгружают CSV без колонки TOTP.
Проблемы с кодировкой и разделителями CSV
KeePass 2.5x выгружает CSV в UTF-8, но в зависимости от настроек может добавлять BOM и менять разделитель на точку с запятой. Проверка занимает минуту: откройте файл в текстовом редакторе, посмотрите первую строку и наличие невидимых символов перед первым заголовком. Excel для правки не подходит: он перекодирует файл по системной локали, добавит кавычки и разделители, а при сохранении в CSV потеряет часть полей. Для массовых правок используйте sed или Python в режиме текстовых строк, а сам файл держите в памяти или на шифрованном разделе.
Что делать, если TOTP-секреты не перенеслись
CSV из KeePass содержит колонку TOTP только при включённом экспорте этого поля, и не все импортёры её читают. Bitwarden принимает секрет в поле login_totp, LastPass переносит данные в extra без гарантии распознавания. Проверьте хранилище на записи с включённым вторым фактором: откройте каждую и убедитесь, что код обновляется. Если секрет потерян, войдите в сервис с резервным кодом и перегенерируйте TOTP заново. После миграции перенастройка второго фактора на десятке сервисов занимает час, поэтому проверку TOTP ставьте в план сразу, а не после удаления старой базы.