Skip to main content

Command-line application for calculating one-time passwords for 2FA.

Project description

py2fa-cli

PyPI version PePy downloads

Calculates and displays time-based one-time passwords (TOTP) for two-factor authentication:

$ py2fa pypi.org
One-time password: 123456 (valid for 13.7 seconds)

Installation

For typical use:

python3 -m pip install py2fa-cli

For development:

git clone https://github.com/arcctgx/py2fa-cli
cd py2fa-cli
python3 -m pip install --editable .

Dependencies

  • pyotp
  • pyxdg

These dependencies will be installed automatically when py2fa-cli is installed by pip.

Configuration

TOTP secrets are stored in user's XDG configuration directory. Unless you changed your XDG_CONFIG_HOME, that will be .config/py2fa/secrets.json in your $HOME. The secrets file must not be world-accessible (readable, writable or executable): in such case py2fa will refuse to load it.

The secrets file is a dictionary represented in JSON format, e.g.:

{
    "pypi.org": "MYPYPITOTPSECRET",
    "test.pypi.org": "MYTESTPYPITOTPSECRET",
    "example.com": "otpauth://totp/ExampleLLC:you@example.com?secret=HUNTER2&issuer=ExampleLLC&period=15"
}

The dictionary key is what you provide in the command-line, so just use any name that's convenient. The value is the shared TOTP secret in base32 format, or an otpauth:// URI.

A note for Microsoft Authenticator users

It is not possible to extract the shared secret from the Microsoft Authenticator application once it's been configured. You can only obtain the shared secret during the initial setup of the authenticator app.

When setting up 2FA and presented with a QR code, do not scan it directly with Microsoft Authenticator. Instead, use a generic QR code scanner app to retrieve the otpauth:// URI, which will look similar to the example shown above. Store this URI in your secrets.json file. Afterward, you can still scan the QR code with Microsoft Authenticator if desired - both py2fa and the app will generate the same TOTP codes.

A known issue with otpauth:// URIs generated by Microsoft MFA is that they may not fully comply with the URI specification: the issuer parameter may differ from the issuer label. To work around this, you can either manually align the issuer parameter with the issuer label in your configuration file, or simply remove the issuer parameter from the URI.

The example in the Configuration section above shows a compliant URI, where the issuer label (the part immediately following totp/ and before the colon) matches the value of the &issuer= parameter.

Project details


Download files

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

Source Distribution

py2fa-cli-1.1.1.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py2fa_cli-1.1.1-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file py2fa-cli-1.1.1.tar.gz.

File metadata

  • Download URL: py2fa-cli-1.1.1.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.2

File hashes

Hashes for py2fa-cli-1.1.1.tar.gz
Algorithm Hash digest
SHA256 10e80acd30f6a2cdc8661069f9f3b2129419faf3b27825d12c940cd5388ed375
MD5 4763cca8b6967b7368eda86dab4184c8
BLAKE2b-256 819252744994bb9f8200b8d5a878bac7dd0f7f44dcd07b4108f421ca3c83403b

See more details on using hashes here.

File details

Details for the file py2fa_cli-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: py2fa_cli-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.7.2

File hashes

Hashes for py2fa_cli-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 33400eb4adf3553e0979835c0cd4f5ca888b7a68c24b0d018dfd03ee7b8058c3
MD5 3af12676b0d6645463f912a99306f0b3
BLAKE2b-256 362805c0f6c49e77894b4ba13e50896a007ec16a3f38cbc85d58627958c40c40

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page