passhole


Namepasshole JSON
Version 1.10.1 PyPI version JSON
download
home_pagehttps://github.com/evidlo/passhole
SummaryCLI KeePass client with dmenu support
upload_time2025-05-24 06:33:39
maintainerNone
docs_urlNone
authorEvan Widloski
requires_pythonNone
licenseGPLv3
keywords keepass cli dmenu password store passwords manager rofi pykeepass libkeepass
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            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"
}
        
Elapsed time: 0.48935s