2022-02-24 - Migrating from KeePassXC to pass, the Unix password
================================================================
manager
=======

Since writing this post, i have switched to using puss.sh, a minimal
replacement for the "pass" script.

Puss Password Manager
<gopher://tilde.pink/1/~bencollver/log/
2025-01-26-puss-password-manager>

Contents
========

* Introduction
* Export KeePassXC database to XML
* Install pass Unix password store
* Initialize pass Unix password store
* Import XML database into pass Unix password store
* Using pass Unix password store

Introduction
============

While reading a gemlog post, i learned of the Unix pass program.

software i [Alex/nytpu] use daily
<gemini://nytpu.com/gemlog/2021-01-10.gmi>

> I use pass to store all my passwords and logins.  I use qute-pass
> for entering logins in qutebrowser, and "Password Store" on my
> phone.

pass: the standard Unix password manager
<https://www.passwordstore.org/>

qute-pass
<gopher://tilde.club/0/~freet/cgi-bin/gophhub.sh?
repo=qutebrowser/qutebrowser&file=1&path=misc/userscripts/qute-pass>

I took a look and was delighted by what i found.  "pass" is a
standard Unix shell script that uses the filesystem as a database and
uses standard utilities such as gpg2.  I am familiar with this
concept because i wrote a similar shell script when i was an HP-UX
admin around 2003/2004.

I decided i would like to give pass a try.  I have been using
KeePassXC, which is a QT GUI app.

Export KeePassXC database to XML
================================

The first step is to export the password database to XML.  KeePassXC
has hidden this option in a command-line utility.

Example:
--------

   $ keepassxc-cli export ~/passwords.kdbx >~export.xml

Install pass Unix password store
================================

I browsed to the Tarball section of passwordstore.org and downloaded
Version 1.7.4.

pass Unix password store
<https://www.passwordstore.org/>

I extracted the tarball.  Since it is a shell script, there is
nothing to build.  To an experienced Unix user, the script and
Makefile are plain and easy to read.  I installed it with the
following command.

   $ make install PREFIX=/home/ben/local

Initialize pass Unix password store
===================================

You must initialize your password store before you use it.  The
password store is encrypted with gpg2, so you will need to have a
GPG2 key ready to go.  I already have gpg2 set up.  Below is a link
to the documentation for reference.

GnuPG documentation
<https://www.gnupg.org/documentation/index.html>

Find your gpg2 key name.  I did this using the following command.

   $ gpg2 --list-keys
   /home/ben/.gnupg/pubring.gpg
   ----------------------------
   pub   2048R/97D71B98 2015-04-04
   uid                  Ben Collver (ben@computor) <[email protected]>

In this case my key name is:
"Ben Collver (ben@computor) <[email protected]>"

But i can use any unique substring from this name.

I used the following command to initialize my password store.

   $ pass init "Ben Collver"

Import XML database into pass Unix password store
=================================================

I browsed to the "Migrating to" section of passwordstore.org and
downloaded a copy of keepass2pass.py  I read through the script to
understand how it works.  Note that KeePassXC exports XML in KeePass2
format, not KeePassX format.

   $ python keepass2pass.py -f ~/export.xml

Using pass Unix password store
==============================

First, i listed my imported passwords using the following command.
The pass command outputs ANSI escape sequences, so it is important to
use the less -R option.

   $ pass | less -R
   Password Store
   └── Root
       ├── Internet
       │   ├── angband forums
       │   ├── archive.org

Next, i listed one of the entries with the following command.

   $ pass Root/Internet/archive.org
   1234567890PlainTextPasswordAlert
   UserName: myusernameisgood
   URL: archive.org
   Notes:
   This, that, and the other thing.

   Username formerly: myusernamewasok

Next, i copied the password to the clipboard and verified it with the
following commands.

   $ pass -c Root/Internet/archive.org
   Copied Root/Internet/archive.org to clipboard. Will clear in 45
   seconds.
   $ xclip -o -selection clipboard
   1234567890PlainTextPasswordAlert

That's enough of for one sitting.  Thanks to Jason Donefeld and the
hacker community for this functional tool!

See follow-up post:

<gopher://tilde.pink/1/~bencollver/log/
2024-10-14-export-password-store/>

tags: bencollver,technical,unix

Tags
====

bencollver
<gopher://tilde.pink/1/~bencollver/log/tag/bencollver/>
technical
<gopher://tilde.pink/1/~bencollver/log/tag/technical/>
unix
<gopher://tilde.pink/1/~bencollver/log/tag/unix/>