MFA TOTP 인증 자동화

2025. 1. 17. 21:12기타

 

MFA 인증 중 TOTP 인증은 CLI로 진행할 때 모바일이나 다른 기기를 통해 매번 확인 후 인증을 해야하는 번거로움이 있습니다. mac에서 터미널 환경에서 TOTP 인증을 자동화하는 방법을 정리했습니다.

처리 과정에 대한 간략한 설명

  1. QR 코드에서 secretKey 추출
  2. secretKey를 이용해 TOTP 생성
  3. ssh 연결 시 TOTP 자동 입력 처리

준비물

  • QR 코드: TOTP를 발급받기 위한 QR코드
  • zbar: 오픈소스 바코드 스캐너 라이브러리입니다.
    • QR코드에서 SecretKey를 추출하기 위해서 사용합니다.
  • oath-toolkit: HOTP(HMAC-based One-Time Password)와 TOTP(Time-based One-Time Password) 알고리즘을 구현한 도구 모음입니다. 일회용 비밀번호(OTP)를 생성하거나 검증하는 데 사용합니다..
    • SecretKey를 이용해 OTP를 생성할 때 사용합니다.
  • expect: 스크립트 기반의 자동화 도구. 대화형 명령줄 애플리케이션(SSH, Telnet 등)을 자동화하는 데 사용합니다.
    • ssh 접속 시 OTP를 입력하기 위해서 사용합니다.

설치방법

brew install zbar
brew install oath-toolkit
brew install expect

1.  QR 코드에서 정보를 추출

  • SecretKey를 이용해서 OTP를 생성하기 위함. Authenticator App의 역할을 대신 할 수 있습니다.
  • 이미 SecretKey를 가지고 있다면 생략해도 됩니다.

zbarimg 를 사용하여 정보 추출

zbarimg your_qr_code.png

출력된 결과 예시

otpauth://totp/YourService:username?secret=TEST123TEST&issuer=TEST
  • parameter의 secret 추출합니다.

 


2. TOTP 생성

authtool을 사용하여 TOTP 생성

  •  추출한 SecretKey(TEST123TEST)를 사용하여 OTP를 생성합니다.
OTP=$(oathtool --totp -b "TEST123TEST")
echo $OTP

출력된 결과 예시

11112222

 


3. ssh 연결 시 TOTP 자동입력 처리

expect 스크립트 작성

  1. expect를 이용하여 expect 블록 내에서 SSH 연결을 시도
  2. "Password:" 프롬프트가 나오면 자동으로 OTP를 입력
  3. 종료
host=$(host_name)
OTP=$(oathtool --totp -b "TEST123TEST")

expect << EOF
set timeout -1
spawn ssh ra-kr-dev
expect "Password:"
send "$OTP\r"
expect eof
EOF