2023. 1. 24. 23:01ㆍEtc
OTP
평소 작업환경에서 2fa를 많이 사용하다 보니 편하게 OTP를 사용할 방법을 고민하게 되었고, 어떤 사용법이 나에게 가장 편할까 관점에서 시작되어 셋업하게된 환경입니다.
OTP 입력을 하게 되는 Input 환경은 크게 2가지였습니다.
- Terminal
- Web browser
Browser의 플러그인이 있긴했지만, 개인적으로 다양한 브라우저를 사용하다보니 모두다 설정해놓는 것도 불편했고,
Terminal만 열어놓고 사용할 때는 Browser를 켜야하는 불편함이 있었습니다. 다른 툴들도 필요시 켜야하는 불편함이 있습니다. 그래서 데스크탑 레벨에서 단축키를 통해 OTP를 생성하고, 자동으로 Clipboard에 저장이 되게 된다면...
단축키 -> Ctrl + v
이거면 어디서든 사용할 수 있겠다라는 결론을 내리고 작업에 들어갔습니다.
먼저 OTP를 생성하는 건 알고리즘이 정해져있기에, Python library로 Code만 확보되면 얼마든지 직접 만들 수 있었고
Clipboard로 생성된 OTP코드를 복사하고, 정상적으로 작업이 완료되었음을 확인할 수 있게 Noti창을 띄우는 기능도 추가
했습니다.
Source code는 아래와 같습니다.
리눅스와 Mac 두군에서 모두 동작하도록 별도의 라이브러리를 사용했습니다.
Code generator
#!/usr/bin/env python3
import sys
import pyotp
import base64
import datetime
import argparse
def get_otp(code):
totp = pyotp.TOTP(code)
return totp.now()
def show_and_copy_otp(otp):
if sys.platform == 'darwin':
show_and_copy_otp_darwin(otp)
elif sys.platform == 'linux':
show_and_copy_otp_linux(otp)
def show_and_copy_otp_darwin(otp):
import subprocess
process = subprocess.Popen('pbcopy', env={'LANG': 'en_US.UTF-8'}, stdin=subprocess.PIPE)
process.communicate(otp.encode('utf-8'))
applescript = """
display notification "{}" with title "OTP"
"""
subprocess.call("osascript -e '{}'".format(applescript.format(otp)), shell=True)
def show_and_copy_otp_linux(otp):
import pyperclip
import notify2
pyperclip.copy(otp)
notify2.init('Basic')
notify2.Notification(otp).show()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--code', type=str, help='code for otp')
args = parser.parse_args()
otp = get_otp(args.code)
show_and_copy_otp(otp)
이제 해당 python script를 수행하면 Popup으로 현재 생성된 code를 띄워주고 그 값은 clipboard에 저장됩니다.
$ otp_clipboard.py --code mycodes
Shortcut
이제 이를 단축키에 연결시킬 차례입니다.
우분투의 경우에는 찾고자하는 의지만 있으면 그리 어렵지 않게 설정이 가능하므로 생략을 하고, 설정에 고생을 한 mac을 기준으로만 기록해두려고 합니다.
Automator 라는 툴을 이용해서 작업을 생성합니다.
유형을 빠른 동작으로 선택해서 아래와 같이 쉘 스크립트 실행 코드를 만들어둡니다.
만약에 코드를 숨기고 싶다면 python에서 외부에 저장된 Secret storage에서 가져오던가, 값을 가져오는 부분을 별도로 작성해서 Python script로 넘기던가 해야할 것입니다.
작성하고, 테스트를 해보면 팝업이 뜨면서 정상적으로 OTP 코드가 생성됨을 확인할 수 있습니다.
이제 단축키로 등록할 차례입니다. 시스템에 키보드에 단축키 탭으로 가면 서비스에 조금전 생성한 OTP가 나타남을 볼 수 있고, 여기에 키를 배정하면 끝입니다.
이제 어디에서든 단축키를 누르면 OTP가 생성이되고, 자동으로 Clipboard로 복사되어짐을 확인할 수 있습니다.
굉장히 편하게 사용이 가능합니다.
'Etc' 카테고리의 다른 글
자작나스 만들기 STEP 3 (transmission web https 설정) (0) | 2023.01.24 |
---|---|
자작나스 만들기 STEP 2 (transmission 설정) (0) | 2023.01.24 |
자작나스 만들기 STEP 1 (sftp 설정) (0) | 2023.01.24 |
.gitconfig (Multi user) (0) | 2023.01.24 |
Github sshkey로 계정 연결하기 (1) | 2023.01.24 |