https://github.com/alexdesousa/oath
Zsh plugin to manage one-time passwords.
https://github.com/alexdesousa/oath
2fa zsh-plugin
Last synced: 4 months ago
JSON representation
Zsh plugin to manage one-time passwords.
- Host: GitHub
- URL: https://github.com/alexdesousa/oath
- Owner: alexdesousa
- License: mit
- Created: 2020-02-06T18:32:49.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-06-19T14:34:44.000Z (over 5 years ago)
- Last Synced: 2024-05-02T01:55:50.954Z (over 1 year ago)
- Topics: 2fa, zsh-plugin
- Language: Shell
- Homepage:
- Size: 17.6 KB
- Stars: 8
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome-zsh-plugins - oath - Manages 2FA authentication 6 digit tokens. It was highly inspired by this article about [using oathtool for 2 step verification](https://www.cyberciti.biz/faq/use-oathtool-linux-command-line-for-2-step-verification-2fa/). (Plugins / ZSH on Windows)
- fucking-awesome-zsh-plugins - oath - Manages 2FA authentication 6 digit tokens. It was highly inspired by this article about 🌎 [using oathtool for 2 step verification](www.cyberciti.biz/faq/use-oathtool-linux-command-line-for-2-step-verification-2fa/). (Plugins / ZSH on Windows)
README
# Oath
> A solemn pledge or promise, appealing to a deity, a ruler, or another entity
> (not necessarily present) to attest to the truth of a statement or sincerity
> of one's desire to fulfill a contract or promise.
`Oath` is an [Oh My ZSH](https://ohmyz.sh/) plugin that manages 2FA
authentication 6 digit tokens. It's highly inspired in
[this article.](https://www.cyberciti.biz/faq/use-oathtool-linux-command-line-for-2-step-verification-2fa/)
## Pre-requisites
`Oath` pre-requisites are as follows:
- `oathtool` for generating 6 digit tokens.
- `gnupg2` for handling private keys securely.
- `xclip` for copying to clipboard.
- An RSA 4096 bits long key (check [this section](#generating-a-key) for
generating a key).
## Small Example
`Oath` allows to add, remove keys as well as show the temporal 6 digit token
e.g:
- Adding a new key for a domain e.g. for `twitter.com`:
```bash
~ $ oath add twitter.com
Private Key:
[SUCESS] Key created for twitter.com
```
- Deleting a key for a domain e.g. for `twitter.com`:
```bash
~ $ oath delete twitter.com
[WARN] Deleting $OATH_DIR/.oath/twitter.com/424184E122529120CC1821756759ADDD12CB6379.gpg
[WARN] Deleting $OATH_DIR/.oath/twitter.com
[SUCCESS] Key deleted for twitter.com
```
- Showing (and copying to clipboard) the current 6 digit token e.g. for `twitter.com`:
```bash
~ $ oath twitter.com
012345
[SUCCESS] Code copied to clipboard
```
- Showing (and copying to clipboard) the key for a domain e.g. for `twitter.com`:
```bash
~ $ oath pk twitter.com
SomePrivateKey
[SUCCESS] Private key copied to clipboard
```
- Listing keys for all domains e.g:
```bash
~ $ oath list twitter.com
twitter.com
github.com
```
- Updating `Oath` to latest version:
```bash
~ $ oath update
```
## Installation
Just clone `Oath` as follows:
```bash
~ $ git clone "https://github.com/alexdesousa/oath.git" "$ZSH_CUSTOM/plugins/oath"
```
And add the oath to your `plugins` in `$HOME/.zshrc` file:
```bash
# Activate completions
autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
plugins=(
oath
)
# Variables for Oath
export OATH_KEY=
export OATH_EMAIL=
```
> **Important**: when updating you can run the following:
>
> ```bash
> cd `$ZSH_CUSTOM/plugins/oath` && git pull origin master
> ```
## Generating a Key
First you need to create a key with `gpg2` as follows:
```bash
$ gpg2 --full-gen-key
```
This will prompt several questions:
1. Kind of key: Hit `[Enter]` or choose `1` for `RSA and RSA`:
```bash
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(14) Existing key from card
Your selection? 1
```
2. Key size: `4096` is recommended.
```bash
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
```
3. Expiration: Choose `0` for no expiration.
```bash
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
```
4. Hit `y` if everything is correct.
```bash
Is this correct? (y/N) y
```
5. Identify the key with:
```bash
GnuPG needs to construct a user ID to identify your key.
Real name: Alex de Sousa
Email address: alex@example.com
Comment: My Oath key
You selected this USER-ID:
"Alex de Sousa (My Oath key) "
```
6. Hit `o` if everything is correct.
```bash
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
```
7. Move you mouse to generate entropy:
```bash
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
```
8. Retrieve your key:
```bash
gpg: key 6759ADDD12CB6379 marked as ultimately trusted
gpg: revocation certificate stored as '/home/alex/.gnupg/openpgp-revocs.d/424184E122529120CC1821756759ADDD12CB6379.rev'
public and secret key created and signed.
pub rsa4096 2020-02-06 [SC]
424184E122529120CC1821756759ADDD12CB6379
uid Alex de Sousa (Oath key)
sub rsa4096 2020-02-06 [E]
```
Then we'll only need the `email` and the key `uid` e.g. in our example the
the following two values:
- `OATH_EMAIL`: `alex@example.com`
- `OATH_KEY`: `424184E122529120CC1821756759ADDD12CB6379`
> **Important**: The key will be in your `$HOME/.gnupg` folder. Saving this
> folder is enough to back it up.
## Author
Alexander de Sousa.
## License
`Oath` is released under the MIT License. See the LICENSE file for further
details.