pass-import

roddhjavGPL-3.0更新放缓

把 KeePass、1Password 等主流密码管理器里的数据迁移到 pass 密码库的命令行扩展,省去手动逐条搬运的麻烦。

A pass extension for importing data from most existing password managers

v3.5发布于 2024-02-25 12:54 UTC915star98fork同步于 2026-11-07 07:33 UTC

怎么上手

由 README 提炼,执行前请确认
pass init <gpg-id>
pass import path/to/passwords
硬件要求按 README 说明

README 未说明

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

pass 扩展,把 63 种密码管理器的数据一键导入 pass 密码库

把 KeePass、1Password 等主流密码管理器里的数据迁移到 pass 密码库的命令行扩展,省去手动逐条搬运的麻烦。

核心能力

  • 原生支持 63 种密码管理器格式导入
  • 自动识别导出文件格式,识别失败可手动指定来源
  • 处理重复条目,OTP 密钥兼容 pass-otp
  • 附带 pimport 脚本,可导出到其他密码管理器
  • 支持 dry-run 预览、子目录导入与 haveibeenpwned 泄露检查

容易踩的坑

导入前必须先用 pass init 初始化密码库,否则无法导入;格式无法自动识别时需显式指定密码管理器名,如 pass import keepass file.xml;pimport 导出到其他管理器需用 --out 指定目标路径

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v3.5
  1. v3.5最新正式版2024-02-25 · 2024-02-25 12:54 UTC

    What's Changed

    New Contributors

    Full Changelog: https://github.com/roddhjav/pass-import/compare/v3.4...v3.5

  2. v3.42022-12-10 · 2022-12-10 15:06 UTC
    查看更新说明

    Added

    • Added a --dry-run option #188

    Changed

    • Dropped support for python 3.7
    • The manpage is now generated during the release process. Dropped pandoc build deps. #192, #186.
    • Automated release process.

    Fixed

    • Fix KDBX import bug #190
  3. v3.32022-09-10 · 2022-09-10 22:27 UTC
    查看更新说明

    Added

    • Added password audit support.
    • Added haveibeenpwned.com audit integration (require the --pwned option).
    • Add support for pwdsphinx #183
    • Add support for nordpass #178
    • Add support for 1Password8 #169
    • Add support for SafeInCloud #168
    • Add support for Lastpass CLI (with lpass) import & export.
    • Read OTP from 1Password's 1pif format #157
    • Add support fot Bitwarden Organisation export in CSV & JSON.

    Changed

    • Support for python 3.10, dropped support for python 3.6
    • Remove Travis CI in favor of Github Action.
    • The man pages are now generated from markdown with pandoc.
    • Various refractor, style and linter improvments.

    Fixed

    • Fix KDBX export group creation #185
    • Fix pykeepass use of find_groups path parameter #182
    • Honor sroot in passwordstore exports #181
    • As safety measure, terminate the GnuPG commandline #165
    • Raise an exception upon invalid LastPass CSV data. #156
    • Fix possible path corruption in deduplication. #154 #155
    • Other various fixed on multiple password managers.
  4. v3.22021-05-16 · 2021-05-16 15:19 UTC
    查看更新说明

    Added

    • Keepass: initial support for TOTP #137
    • Add support for modern firefox import. #134
    • Keepass: enable reference substitution #132
    • Add gopass support #130

    Changed

    • Fully deprecate Makefile in favor of setup.py
    • Make pimport a setuptools script #138
    • Support for pykeepass 4.0.0 #136
    • Support for python 3.9

    Fixed

    • Update Dashlane Json format #133
    • Fix importer var name. #127
    • Fix install for MacOS. #125
    • Update Bitwarden Json format. #123
  5. v3.12020-10-25 · 2020-10-25 23:22 UTC
    查看更新说明

    Added

    • Support for direct classname selection.
    • Support for pyhton-magic #115
    • Support for the --root option in keepass. #112
    • Support for custom fields in Bitwarden. #111

    Changed

    • Use setup.py to manage the full installation.
    • Support for pykeepass 3.2.1

    Fixed

    • Ensure each pass entry has a name. #118
    • Rewrite PasswordStore.list() with Pathlib. #109
    • New Chrome documentation. #106
    • Ensure the password manager action is a capability. #105
    • Fix import.bash path in local make target #104
    • Ensure the magic module is file-magic. #103
    • Update Buttercup CSV format. #102

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    pass import

    A pass extension for importing data from most existing password managers

    Description

    pass import is a password store extension allowing you to import your password database to a password store repository conveniently. It natively supports import from 63 different password managers. More manager support can easily be added.

    Passwords are imported into the existing default password store, therefore the password store must have been initialized before with pass init.

    By default, pass imports entries at the root of the password store and only keeps the main data (password, login, email, URL, group). This behaviour can be changed using the provided options.

    Pass import handles duplicates and is compatible with browserpass. It imports OTP secret in a way that is compatible with pass-otp.

    pass-import also provides a pimport script that allows importing passwords to other password managers. For instance, you can import passwords from Lastpass to a Keepass database. It currently supports password export from 8 managers.

    The following password managers are supported:

    The following destination password managers are supported:

    Exporters Password ManagerFormatCommand line
    csvcsvpimport csv src [src]
    gopassgopasspimport gopass src [src]
    keepasskdbxpimport keepass src [src]
    keepassx2kdbxpimport keepassx2 src [src]
    keepassxckdbxpimport keepassxc src [src]
    lastpassclipimport lastpass src [src]
    passpasspimport pass src [src]
    sphinxpimport sphinx src [src]

    Usage

    Basic use

    To import password from any supported password manager simply run:

    pass import path/to/passwords
    

    If pass-import is not able to detect the format, you need to provide the password manager <pm> you want to import data from:

    pass import <pm> path/to/passwords
    

    If you want to import data to a password manager other than pass, run:

    pimport <new_pm> <former_pm> path/to/passwords --out path/to/destination/pm
    

    Help

    usage: pass import [-r path] [-p path] [-k KEY] [-a] [-f] [-c] [-C] [-P] [-d]
                       [--sep CHAR] [--del CHAR] [--cols COLS] [--filter FILTER]
                       [--config CONFIG] [-l] [-h] [-V] [-v | -q]
                       [src ...]
    
      Import data from most of the password manager. Passwords are imported into
      the existing default password store; therefore, the password store must have
      been initialised before with 'pass init'.
    
    Password managers:
      src                   Path to the data to import. Can also be the password
                            manager name followed by the path to the data to
                            import. The password manager name can be: 1password,
                            aegis, andotp, apple-keychain, bitwarden, blur,
                            buttercup, chrome, clipperz, csv, dashlane, encryptr,
                            enpass, firefox, fpm, freeotp+, gnome, gnome-auth,
                            gopass, gorilla, kedpm, keepass, keepassx, keepassx2,
                            keepassxc, keeper, lastpass, myki, network-manager,
                            nordpass, padlock, pass, passman, passpack, passpie,
                            pwsafe, revelation, roboform, safeincloud, saferpass,
                            synology, upm, zoho.
    
    Common optional arguments:
      -r path, --root path  Only import the password from a specific subfolder.
      -p path, --path path  Import the passwords to a specific subfolder.
      -k KEY, --key KEY     Path to a keyfile if required by a manager.
      -a, --all             Also import all the extra data present.
      -f, --force           Overwrite existing passwords.
      -c, --clean           Make the paths more command line friendly.
      -C, --convert         Convert invalid characters present in the paths.
      -P, --pwned           Check imported passwords against haveibeenpwned.com.
      -d, --dry-run         Do not import passwords, only show what would be
                            imported.
    
    Extra optional arguments:
      --sep CHAR            Provide a characters of replacement for the path
                            separator. Default: '-'
      --del CHAR            Provide an alternative CSV delimiter character.
                            Default: ','
      --cols COLS           CSV expected columns to map columns to credential
                            attributes. Only used by the csv importer.
      --filter FILTER       Export whole entries matching a JSONPath filter
                            expression. Default: (none) This field can be: - a
                            string JSONPath expression - an absolute path to a
                            file containing a JSONPath filter expression. List of
                            supported filter: https://github.com/h2non/jsonpath-ng
                            Example: - '$.entries[*].tags[?@="Defaults"]' : Export
                            only entries with a tag matching 'Defaults'
      --config CONFIG       Set a config file. Default: '.import'
    
    Help related optional arguments:
      -l, --list            List the supported password managers.
      -h, --help            Show this help message and exit.
      -V, --version         Show the program version and exit.
      -v, --verbose         Set verbosity level, can be used more than once.
      -q, --quiet           Be quiet.
    
    More information may be found in the pass-import(1) man page.
    

    Usage for pimport can been seen with pimport -h or man pimport.

    Examples

    Import password from KeePass

    pass import keepass.xml
    (*) Importing passwords from keepass to pass
     .  Passwords imported from: keepass.xml
     .  Passwords exported to: ~/.password-store
     .  Number of password imported: 6
     .  Passwords imported:
           Social/mastodon.social
           Social/twitter.com
           Social/news.ycombinator.com
           Servers/ovh.com/bynbyjhqjz
           Servers/ovh.com/jsdkyvbwjn
           Bank/aib
    

    This is the same than: pimport pass keepass.xml --out ~/.password-store

    Import password to a different password store

    export PASSWORD_STORE_DIR="~/.mypassword-store"
    pass init <gpg-id>
    pass import keepass.kdbx
    

    Import password to a subfolder

    pass import bitwarden.json -p Import/
    (*) Importing passwords from bitwarden to pass
     .  Passwords imported from: bitwarden.json
     .  Passwords exported to: ~/.password-store
     .  Root path: Import
     .  Number of password imported: 6
     .  Passwords imported:
          Import/Social/mastodon.social
          Import/Social/twitter.com
          Import/Social/news.ycombinator.com
          Import/Servers/ovh.com/bynbyjhqjz
          Import/Servers/ovh.com/jsdkyvbwjn
          Import/Bank/aib
    

    Other examples:

    • If the manager is not correctly detected, you can pass it at source argument: pass import dashlane dashlane.csv
    • Import NetworkManager password on default dir: pass import networkmanager
    • Import a NetworkManager INI file: pass import nm.ini
    • Import a One password 1PIF: pass import 1password.1pif
    • Import a One password CSV: pass import 1password.csv
    • Import a Passman JSON file: pass import passman.json
    • Import Lastpass file to a keepass db: pimport keepass lastpass.csv --out keepass.kdbx
    • Import a password store to a CSV file: pimport csv ~/.password-store --out file.csv
    • Export Bitwarden to SPHINX: pimport sphinx bitwarden.json -o sphinx.cfg

    GPG keyring

    Before importing data to pass, your password-store repository must exist and your GPG keyring must be usable. In other words, you need to ensure that:

    • All the public gpgids are present in the keyring.
    • All the public gpgids are trusted enough (ultimate).
    • At least one private key is present in the keyring.

    Otherwise, you will get the following error: invalid credentials, password encryption/decryption aborted.

    To set the trust on a GPG key, one can run gpg --edit-key <gpgid>. Next type trust and select 5 = I trust ultimately.

    Security consideration

    Direct import

    Passwords should not be written in plain text form on the drive. Therefore, when possible, you should import it directly from the encrypted data. For instance, with an encrypted keepass database:

    pass import keepass file.kdbx
    

    Secure erasure

    Otherwise, if your password manager does not support it, you should take care of securely removing the plain text password database:

    pass import lastpass data.csv
    shred -u data.csv
    

    Encrypted file

    Alternatively, pass-import can decrypt gpg encrypted file before importing it. For example:

    pass import lastpass lastpass.csv.gpg
    

    Mandatory Access Control (MAC)

    AppArmor profiles for pass and pass-import are available in apparmor.d. If your distribution support AppArmor, you can clone the apparmor.d and run: make && sudo make install pass pass-import to only install these apparmor security profiles.

    Network

    pass-import only needs to establish network connection to support cloud based password manager. If you do not use these importers you can ensure pass-import is not using the network by removing the network rules in the apparmor profile of pass-import.

    Password Update

    You might also want to update the passwords imported using pass-update.

    Configuration file

    Some configurations can be read from a configuration file called .import if it is present at the root of the password repository. The configuration read from this file will be overwritten by their corresponding command-line option if present.

    Example of the .import configuration file for the default password repository in ~/.password-store/.import:

    ---
    
    # Separator string
    separator: '-'
    
    # The list of string that should be replaced by other string. Only activated
    # if the `clean` option is enabled.
    cleans:
      ' ': '-'
      '&': 'and'
      '@': At
      "'": ''
      '[': ''
      ']': ''
    
    # The list of protocols. To be removed from the title.
    protocols:
      - http://
      - https://
    
    # The list of invalid characters. Replaced by the separator.
    invalids:
      - '<'
      - '>'
      - ':'
      - '"'
      - '/'
      - '\\'
      - '|'
      - '?'
      - '*'
      - '\0'
    

    Installation

    Requirements

    • pass 1.7.0 or greater.
    • Python 3.8+
    • python3-setuptools to build and install it.
    • python3-yaml (apt install python3-yaml or pip3 install pyaml, or python3 -m pip install pyaml if on MacOS running python installed via brew)

    Optional Requirements

    DependencyRequired foraptpip
    passPassword Store import/exportapt install passN/A
    lpassLastpass cli based import/exportapt install lpassN/A
    defusedxmlRecommended XML libraryapt install python3-defusedxmlpip3 install defusedxml
    pykeepassKeepass import from KDBX fileN/Apip3 install pykeepass
    secretstorageGnome Keyring importapt install python3-secretstoragepip3 install secretstorage
    cryptographyAndOTP or Aegis encrypted importapt install python3-cryptographypip3 install cryptography
    file-magicDetection of file decryptionapt install python-magicpip3 install file-magic
    pwdsphinxExport to SPHINXN/A(coming soon)pip3 install pwdsphinx
    filterFilter exportsN/Apip3 install jsonpath-ng

    ArchLinux

    pass-import is available in the Arch User Repository.

    yay -S pass-import  # or your preferred AUR install method
    

    Debian/Ubuntu

    pass-import is available under my own debian repository with the package name pass-extension-import. Both the repository and the package are signed with my GPG key: 06A26D531D56C42D66805049C5469996F0DF68EC.

    wget -qO - https://pkg.pujol.io/debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/pujol.io.gpg >/dev/null
    echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/pujol.io.gpg] https://pkg.pujol.io/debian/repo all main' | sudo tee /etc/apt/sources.list.d/pkg.pujol.io.list
    sudo apt-get update
    sudo apt-get install pass-extension-import
    

    NixOS

    nix-env -iA nixos.passExtensions.pass-import
    

    Using pip

    pip install pass-import
    

    From git

    git clone https://github.com/roddhjav/pass-import/
    cd pass-import
    python3 setup.py install
    

    Stable version

    wget https://github.com/roddhjav/pass-import/releases/download/v3.5/pass-import-3.5.tar.gz
    tar xzf pass-import-3.5.tar.gz
    cd pass-import-3.5
    python3 setup.py install
    

    Releases and commits are signed using 06A26D531D56C42D66805049C5469996F0DF68EC. You should check the key's fingerprint and verify the signature:

    wget https://github.com/roddhjav/pass-import/releases/download/v3.5/pass-import-3.5.tar.gz.asc
    gpg --recv-keys 06A26D531D56C42D66805049C5469996F0DF68EC
    gpg --verify pass-import-3.5.tar.gz.asc
    

    Local install

    Alternatively, from git or from a stable version you can do a local install with:

    cd pass-import
    python3 setup.py install --user
    

    [!IMPORTANT]
    For local install you need to:

    1. Set PASSWORD_STORE_ENABLE_EXTENSIONS to true for the local extension to be enabled.
    2. Set PASSWORD_STORE_EXTENSIONS_DIR to local the install path of python

    Example:

    export PASSWORD_STORE_ENABLE_EXTENSIONS=true
    export PASSWORD_STORE_EXTENSIONS_DIR="$(python -m site --user-site)/usr/lib/password-store/extensions/"
    

    The import Library

    One can use pass-import as a python library. Simply import the classes of the password manager you want to import and export. Then use them in a context manager. For instance, to import password from a cvs Lastpass exported file to password-store:

    from pass_import.managers.lastpass import LastpassCSV
    from pass_import.managers.passwordstore import PasswordStore
    
    with LastpassCSV('lastpass-export.csv') as importer:
        importer.parse()
    
        with PasswordStore('~/.password-store') as exporter:
            exporter.data = importer.data
            exporter.clean(True, True)
            for entry in exporter.data:
                exporter.insert(entry)
    

    Alternatively, you can import the same Lastpass file to a Keepass database:

    from pass_import.managers.keepass import Keepass
    from pass_import.managers.lastpass import LastpassCSV
    
    with LastpassCSV('lastpass-export.csv') as importer:
        importer.parse()
    
        with Keepass('keepass.kdbx') as exporter:
            exporter.data = importer.data
            exporter.clean(True, True)
            for entry in exporter.data:
                exporter.insert(entry)
    

    Contribution

    Feedback, contributors, pull requests are all very welcome. Please read the CONTRIBUTING.rst file for more details on the contribution process.