Skip to main content

A terminal-based password manager

Project description

Passman is a password management application that allows for password generation, storage, retrieval, updates, and removal from the comfort of the command line.

Passman was written by:

Sam Messina

Dan Jensen

Installing

Passman is pip-installable, using

pip install passman

After installing, simply run:

passman

If you encounter errors, first check the following dependencies:

  • Python 3. Passman will not work with Python 2
  • A copy/paste mechanism for the system (e.g. xsel)
  • If on Windows, you will need Visual C++ Build Tools to enable pycrypto. See Microsoft’s site for more info.

Introduction

While there are a plethora of existing password managers, few can be intuitively used from the command line. Passman aims to fix that by supporting a terminal-based user interface along side a full API of command line arguments. Passman is written for people who may not have access to a graphical user environment, people who need quick access to passwords over SSH, or people who simply prefer to work from the terminal instead of using graphical alternatives. Additionally, Passman’s full support of command line arguments allows users to define their own aliases, catering to their specific needs in as efficient a manner as possible.

Features

Passman logs users’ accounts for different online services/ Each service can contain the name, username, URL, and password associated with the service. Passman supports all create, read, update, and delete options on all data associated with services. Data is most easily retrieved via the clipboard. When getting data for a service, it is automatically copied to the user’s clipboard. If the data still remains on the clipboard after 20 seconds, it will be cleared.

By running Passman without any command line arguments, users invoke a terminal-based menu. The menu is complete with sanitized inputs, ensuring that wanton crashes do not occur during runtime. After logging in or signing up, users have access to all of Passman.s features.

Passman can also run with command line arguments, supporting all the create, read, update, and delete operations. Additionally, users can supply a username to avoid entering it manually. The only data that is unable to be supplied via command line arguments is the master password, which will be prompted before any data is returned.

Security

Nearly every piece of data that Passman processes is either encrypted or hashed. The only plaintext that is stored by Passman is the master username. The master password is hashed using SHA 512. An additional hash using SHA 256 is also created, which acts as the key to service data encryption. All services’ usernames, URLs, passwords, and names are encrypted using the key generated from the master password. All service encryption uses AES encryption with standard block size.

Data Storage

Online

By default, Passman uses MongoDB on a publicly-hosted server to store all user data. Users are allocated a single Mongo “document” in which all service data is stored. All encryption and decryption occurs locally, only sending encrypted or hashed data across the network.

Offline

Passman keeps a cache of user data locally as well. On login or signup, as well as on quit, the online database will be pulled down to local JSON file located in the ~/.passman directory. Every user’s cache is allocated a single JSON file. Only the currently-logged-in user’s data will be downloaded.

This serves a number of purposes, but mainly addresses the issue of a down server. If our MongoDB server goes down, users are able to run Passman in offline mode. Offline mode only supports read operations, and will not allow for users to create, update, or delete their service data. Both menu and command line argument usage supports offline mode.

Command Line API

usage: passman.py [-h] [-u username] [-l] [-p service_name] [-w service_name]
                  [-n service_name] [-a service_name] [-e service_name]
                  [-r service_name]

optional arguments:
  -h, --help            show this help message and exit
  -u username, --user username
                        Your username for passman
  -l, --list            List existing services
  -p service_name, --pass service_name
                        Get password for a service
  -w service_name, --www service_name
                        Get URL for a service
  -n service_name, --name service_name
                        Get the username for a service
  -a service_name, --add service_name
                        Add a new service to your account
  -e service_name, --edit service_name
                        Edit an existing service
  -r service_name, --remove service_name
                        Remove and existing service

Special Thanks

Ayush Kohli: https://github.com/akohli96

Greg Brinkman: https://github.com/GregoryBrinkman

Project details


Release history Release notifications

This version
History Node

1.2.3

History Node

1.2.2

History Node

1.2.1

History Node

1.2.0

History Node

1.1.9

History Node

1.1.8

History Node

1.1.7

History Node

1.1.6

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
passman-1.2.3.tar.gz (14.5 kB) Copy SHA256 hash SHA256 Source None May 2, 2017

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page