I needed a tool for managing passwords and I wrote CLI Password Manager to help me to manage my accounts and passwords in a meaningful way (for me, at least).
CLI Password Manager is a tool for the shell, written in Python and available here at GitHub.
The idea for the tool came from the fact that I have many accounts and passwords (who hasn’t?). I also use multiple computers, and syncing passwords was something I never did and passwords were not securely stored and I used the same passwords in many places. All these began to scare me and started to kept me awake at nights…
So I needed some password management. There are multiple options, for example: simple file (txt, word, excel, etc. etc.) in Dropbox or a note in Evernote or dedicated tool for management.
Looking at the options I dropped Evernote very early on. But Dropbox was something to think of but having simple files for passwords wasn’t really a solution. Dedicated tools were high on my list but then I didn’t want to pay anything and I also thought about what is really my use case.
My use case is very simple: when I go to web site that needs login I just need to type my username (that I usually remember) and then copy-paste password and enter the site. That’s all, I don’t need no fancy stuff.
After the use case was clear, the decision to write command line tool came easily. The main requirement was to store passwords in an encrypted file (and file saved to Dropbox, so it solves the access from multiple computers). Other requirements included search and listing of accounts and also copying the password to clipboard. All this was easily implemented in Python. The passwords file is in JSON (for future extensions) and internally I use Sqlite. Encryption uses AES implemented by Python cryptography library.
I chose Python since I knew it already and it suited very well for command line application. Being interpreted language, there’s no compile steps so it was fast to try out stuff to find out what worked and what not.
And now I have my password management tool. In the command line.