Passhole
========
.. image:: https://img.shields.io/matrix/pykeepass:matrix.org.svg
:target: https://matrix.to/#/#pykeepass:matrix.org
``passhole`` is a commandline password manager for KeePass inspired by `pass`_.
.. _pass: https://www.passwordstore.org
.. image:: https://i.imgur.com/lWLgbo3.gif
- `Manual`_
- `Features`_
- `Setup`_
- `Example Usage`_
- `Example i3wm Keybindings`_
- `Testing and Development`_
Features
------------
- fill user/pass field in any application via keyboard shortcut
- add, delete, move, edit, rename entries and groups
- generate alphanumeric, symbolic, or `correct horse battery staple`_ style passwords
- temporarily cache database password (by default for 10 minutes)
- multiple databases
- supports KeePass v3 and v4 databases
- supports TOTP
.. _correct horse battery staple: http://xkcd.com/936
See below for examples and the `manual`_ (or ``man passhole``) for a complete list of commands and options.
.. _manual: https://github.com/evidlo/passhole/tree/master/MANUAL.rst
Setup
------------
.. code:: bash
pip install passhole
ph init
# optionally install zenity for graphical password prompt
sudo apt install zenity
Example Usage
--------------
.. code:: bash
# add a new entry with manually created password
$ ph add github
Username: Evidlo
Password:
Confirm:
URL: github.com
# add an entry with a generated alphanumeric password
$ ph add neopets -a
Username: Evidlo
URL: neopets.com
# add a new group
$ ph add social/
# add an entry to `social/` with a 32 character password (alphanumeric + symbols)
$ ph add social/facebook -s 32
Username: evan@evanw.org
URL: facebook.com
# add an entry to `social/` with a correct-horse-battery-staple type password
$ ph add social/twitter -w
Username: evan@evanw.org
URL: twitter.com
# list all entries
$ ph list
github
neopets
[social]
├── facebook
└── twitter
# display contents of entry
$ ph show social/twitter
Title: twitter
Username: Evidlo
Password: inns.ambien.travelling.throw.force
URL: twitter.com
# retrieve contents of specific field for use in scripts
$ ph show social/twitter --field password
inns.ambien.travelling.throw.force
Example i3wm Keybindings
------------------------
.. code:: bash
# select entry using dmenu, then send password to keyboard
bindsym $mod+p exec "ph type --prog dmenu"
# select entry using dmenu, then send username + password to keyboard
bindsym $mod+Shift+p exec "ph type --tabbed --prog dmenu"
Testing and Development
-----------------------
Running tests
.. code:: bash
# from repo root dir:
python test/tests.py
Isolated install in Docker
.. code:: bash
# debian
make docker_debian
Building manpage and packaging
.. code:: bash
make man
make dist
See also
--------
- `keepmenu`_
- `kpcli`_
- `keepassxc`_
- `kdbxpasswordpwned`_
.. _keepmenu: https://github.com/firecat53/keepmenu/
.. _kpcli: http://kpcli.sourceforge.net/
.. _keepassxc: https://keepassxc.org/
.. _kdbxpasswordpwned: https://github.com/fopina/kdbxpasswordpwned
Build Dependencies
---------------------------
Alpine
apk add gcc libffi-dev py3-lxml py3-pip python3-dev libc-dev
Raw data
{
"_id": null,
"home_page": "https://github.com/evidlo/passhole",
"name": "passhole",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "keepass cli dmenu password store passwords manager rofi pykeepass libkeepass",
"author": "Evan Widloski",
"author_email": "evan@evanw.org",
"download_url": "https://files.pythonhosted.org/packages/43/5c/996e762e83b7a26f381d961a50d3f39da157877ef4e7b0b72c0e3722c843/passhole-1.10.1.tar.gz",
"platform": null,
"description": "Passhole\n========\n\n.. image:: https://img.shields.io/matrix/pykeepass:matrix.org.svg\n :target: https://matrix.to/#/#pykeepass:matrix.org\n\n\n``passhole`` is a commandline password manager for KeePass inspired by `pass`_.\n\n.. _pass: https://www.passwordstore.org\n\n.. image:: https://i.imgur.com/lWLgbo3.gif \n\n- `Manual`_\n- `Features`_\n- `Setup`_\n- `Example Usage`_\n- `Example i3wm Keybindings`_\n- `Testing and Development`_\n\n\nFeatures\n------------\n\n- fill user/pass field in any application via keyboard shortcut\n- add, delete, move, edit, rename entries and groups\n- generate alphanumeric, symbolic, or `correct horse battery staple`_ style passwords\n- temporarily cache database password (by default for 10 minutes)\n- multiple databases\n- supports KeePass v3 and v4 databases\n- supports TOTP\n\n.. _correct horse battery staple: http://xkcd.com/936\n\nSee below for examples and the `manual`_ (or ``man passhole``) for a complete list of commands and options.\n\n.. _manual: https://github.com/evidlo/passhole/tree/master/MANUAL.rst\n\nSetup\n------------\n\n.. code:: bash\n\n pip install passhole\n ph init\n \n # optionally install zenity for graphical password prompt\n sudo apt install zenity\n\n\nExample Usage\n--------------\n\n.. code:: bash\n\n # add a new entry with manually created password\n $ ph add github\n Username: Evidlo\n Password: \n Confirm: \n URL: github.com\n\n # add an entry with a generated alphanumeric password\n $ ph add neopets -a\n Username: Evidlo\n URL: neopets.com\n\n # add a new group\n $ ph add social/\n \n # add an entry to `social/` with a 32 character password (alphanumeric + symbols)\n $ ph add social/facebook -s 32\n Username: evan@evanw.org\n URL: facebook.com\n\n # add an entry to `social/` with a correct-horse-battery-staple type password\n $ ph add social/twitter -w\n Username: evan@evanw.org\n URL: twitter.com\n\n # list all entries\n $ ph list\n github\n neopets\n [social]\n \u251c\u2500\u2500 facebook\n \u2514\u2500\u2500 twitter\n\n # display contents of entry\n $ ph show social/twitter\n Title: twitter\n Username: Evidlo\n Password: inns.ambien.travelling.throw.force\n URL: twitter.com\n\n # retrieve contents of specific field for use in scripts\n $ ph show social/twitter --field password\n inns.ambien.travelling.throw.force\n\nExample i3wm Keybindings\n------------------------\n\n.. code:: bash\n\n # select entry using dmenu, then send password to keyboard\n bindsym $mod+p exec \"ph type --prog dmenu\"\n\n # select entry using dmenu, then send username + password to keyboard\n bindsym $mod+Shift+p exec \"ph type --tabbed --prog dmenu\"\n\nTesting and Development\n-----------------------\n\nRunning tests\n\n.. code:: bash\n\n # from repo root dir:\n python test/tests.py\n\nIsolated install in Docker\n\n.. code:: bash\n\n # debian\n make docker_debian\n\nBuilding manpage and packaging\n\n.. code:: bash\n\n make man\n make dist\n\nSee also\n--------\n- `keepmenu`_\n- `kpcli`_\n- `keepassxc`_\n- `kdbxpasswordpwned`_\n\n.. _keepmenu: https://github.com/firecat53/keepmenu/\n.. _kpcli: http://kpcli.sourceforge.net/\n.. _keepassxc: https://keepassxc.org/\n.. _kdbxpasswordpwned: https://github.com/fopina/kdbxpasswordpwned\n\nBuild Dependencies\n---------------------------\n\nAlpine\n\n apk add gcc libffi-dev py3-lxml py3-pip python3-dev libc-dev\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "CLI KeePass client with dmenu support",
"version": "1.10.1",
"project_urls": {
"Homepage": "https://github.com/evidlo/passhole"
},
"split_keywords": [
"keepass",
"cli",
"dmenu",
"password",
"store",
"passwords",
"manager",
"rofi",
"pykeepass",
"libkeepass"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "435c996e762e83b7a26f381d961a50d3f39da157877ef4e7b0b72c0e3722c843",
"md5": "961a7c841026b9650ae540fc81077d2c",
"sha256": "e71f110391f40f100023475e2d78544b2faae6f1a2c4258753877d1585d171d1"
},
"downloads": -1,
"filename": "passhole-1.10.1.tar.gz",
"has_sig": false,
"md5_digest": "961a7c841026b9650ae540fc81077d2c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 65435,
"upload_time": "2025-05-24T06:33:39",
"upload_time_iso_8601": "2025-05-24T06:33:39.689541Z",
"url": "https://files.pythonhosted.org/packages/43/5c/996e762e83b7a26f381d961a50d3f39da157877ef4e7b0b72c0e3722c843/passhole-1.10.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-05-24 06:33:39",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "evidlo",
"github_project": "passhole",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "passhole"
}