Скрипт для генерации OTP при использовании MFA в Unix/Linux

Скрипт для генерации OTP при использовании MFA в Unix/Linux

Есть много плагинов на веб браузеры, которые умеют генерировать ПИН  для вашего MFA. Так же, имеется большое количество ПО на мобильные девайсы, но как по мне, лучше заюзать терминал.

Полезное чтиво:

Установка pip/setuptools/wheel в Unix/Linux

Собственно, я взял и написал скрипт для этой задачи:

# vim get_OTP.py

Выглядит он следующим образом:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import configparser
import argparse
import pyotp
import os


def get_creds_from_acc_name(acc_name):
    db_file = ''
    if db_file is '':
        print('Please add PATH to .aws/credentials file inside this script(db_file variable)')
        exit(1)
    config = configparser.ConfigParser()
    config.sections()
    config.read(db_file)
    if acc_name in config:
        if 'aws_access_key_id' in config[acc_name]:
            aws_access_key_id = config[acc_name]['aws_access_key_id']
        else:
            print('Please add aws_access_key_id to %s file' % db_file)
            exit(1)
        if 'aws_secret_access_key' in config[acc_name]:
            aws_secret_access_key = config[acc_name]['aws_secret_access_key']
        else:
            print('Please add aws_secret_access_key to %s file' % db_file)
            exit(1)
        if 'region' in config[acc_name]:
            region = config[acc_name]['region']
        else:
            print('Please add region to %s file' % db_file)
            exit(1)
        if 'mfa_autorisation_key' in config[acc_name]:
            mfa_autorisation_key = config[acc_name]['mfa_autorisation_key']
        else:
            print('Please add mfa_autorisation to %s file' % db_file)
            exit(1)
    else:
        print('Please add [%s] account to %s' % (acc_name, db_file))
        print('''EXAMPLE:
            [%s]
            aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXX
            aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYY
            region = us-east-1
            mfa_autorisation_key = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
         ''' % acc_name)
        exit(1)

    return aws_access_key_id, aws_secret_access_key, region, mfa_autorisation_key


def generate_token(acc_name):
    account_creds = get_creds_from_acc_name(acc_name)
    totp = pyotp.TOTP(account_creds[3])
    print("Current OTP for %s:" % acc_name, totp.now())
    return generate_token


def main():
    parser = argparse.ArgumentParser(prog='python3 script_name.py -h',
                                     usage='python3 script_name.py {ARGS}',
                                     add_help=True,
                                     prefix_chars='--/',
                                     epilog='''created by Vitalii Natarov''')
    parser.add_argument('--version', action='version', version='v0.1.1')
    parser.add_argument('--acc', dest='account', help='Account name', default=None)
    results = parser.parse_args()
    ac_name = results.account
    generate_token(ac_name)


if __name__ == '__main__':
    main()

Для запуска, можно использовать слкдующую команду:

$ python3 get_OTP.py -h
usage: python3 script_name.py {ARGS}

optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
--acc ACCOUNT Account name

created by Vitalii Natarov

Это так званный хелп. Скрипт полностью готов к использованию. У него есть подсказки, которые помогут вам в работе.

Я запускаю его следующим образом:

$ python3 get_OTP.py --acc linux-notes
Current OTP for linux-notes: 199746

Еще примеры:

$ python3 get_OTP.py --acc default
Please add mfa_autorisation to /Users/captain/.aws/credentials file

Или:

$ python3 get_OTP.py --acc default2
Please add [default2] account to /Users/captain/.aws/credentials
EXAMPLE:
            [default2]
            aws_access_key_id = XXXXXXXXXXXXXXXXXXXXXXXX
            aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYY
            region = us-east-1
            mfa_autorisation_key = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

На мой взгляд — очень даже интуитивно все.

PS: Нужно установить либу:

# pip3 install pyotp

В моем случае, я использую AWS и добавляю в него нужную строку. Вообще, можно немного видоизменить скрипт и считывать данные с другого файла. Если кому-то потребутся помощь — я срадостью помогу.

А на этом, у меня все, статья «Скрипт для генерации OTP при использовании MFA в Unix/Linux» завершена.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *