this post was submitted on 13 Nov 2024
26 points (100.0% liked)

Open Source

31220 readers
279 users here now

All about open source! Feel free to ask questions, and share news, and interesting stuff!

Useful Links

Rules

Related Communities

Community icon from opensource.org, but we are not affiliated with them.

founded 5 years ago
MODERATORS
 

Hi. Basically, I'm asking for suggestions. Do you know any good 2FA app that works on linux desktop? I'm looking for something that I can use instead of Aegis, Google authenticator, or microsoft authenticator, but in my computer. Note: It'd be great if it is open source but I'm not closed to proprietary apps, as long as they work on linux

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 1 points 1 day ago* (last edited 1 day ago)

Assuming you had the secrets stored in a secrets.json file in your home directory in this format:

{
  "github": "github2FAsecretKey",
  "some_other_account": "2FAsecretKeyForSomeOtherAccount"
}

You could make a simple otp.py script and basic TOTP library to generate them in a script & copy them to clipboard:

#!/usr/bin/env python3

import json
from pyotp import TOTP
import os
from sys import argv

try:
  file = json.load(open(os.path.join('/home','username','secrets.json')))
  if len(argv) > 1:
    totp = TOTP(file[str(argv[1])])
    code = totp.now()
    cmd = 'cb cp $(echo %s | tr -d "\n")' % code
    os.system(cmd)
  else:
    print(f"Available args:\n  {'\n  '.join(list(file.keys()))}")
except Exception as e:
  print(f'Error in OTP: {e}')

Then you just alias otp='f() { $HOME/otp.py $1 };f' in your shell profile/rc and call it with e.g. otp some_other_account or just otp if you forget what key names you gave them to get a reminder list. Obviously you'd want to replace the JSON plaintext file load with an actual secret store if you're not a lazy madman. I am a lazy madman.

Edit: when I stop being lazy I will probably switch to that [email protected] suggestion below (pass + pass-otp extension).