본 시스템을 구축하기 위한 핵심 의존성 및 설정, 사용법은 다음과 같습니다.
의존성
-
totp-cli: TOTP 키 저장 및 자격 증명 생성을 담당합니다. -
age:totp-cli암호를 암호화하고 복호화하는 데 사용됩니다. -
age-plugin-se: Apple의 Secure Enclave(Touch ID)를age에서 활용할 수 있도록 지원합니다.
이 모든 도구는 Homebrew를 통해 쉽게 설치할 수 있습니다. macOS가 아닌 환경에서는 YubiKey 등 다른 age 플러그인을 활용할 수 있습니다.
설정 단계
-
totp-cli암호 생성: Apple Password.app 등 암호 관리자에서totp-cli용 고유 암호(예: YYYYYY)를 생성하고 저장합니다. -
Rubygems OTP 항목 추가: 다음 명령어를 사용하여
totp-cli에 Rubygems OTP 항목을 추가합니다. Rubygems.org에서 제공하는 토큰(XXXXXX)과 위에서 생성한totp-cli암호(YYYYYY)를 입력합니다.bash totp-cli add totp rubygems.org주의: Rubygems.org의 UI 문제로 인해 토큰을 얻기 위해 인증 앱을 비활성화했다가 다시 활성화해야 할 수 있습니다. 또한, 이 TOTP 코드와 Rubygems 복구 코드를 암호 관리자에 함께 저장하여 cmdline과 암호 관리자의 OTP가 동기화되도록 유지해야 합니다. -
암호화 키 생성:
age-plugin-se를 사용하여 암호화 키를 생성합니다. 이 키는 Secure Enclave를 활용하여 암호화/복호화에 사용됩니다.bash age-plugin-se keygen -o ~/.age.key chmod 600 ~/.age.key -
totp-cli암호 암호화:totp-cli암호(YYYYYY)를age를 사용하여 암호화하고, 암호화된 파일을~/.totp.rubygems.age로 저장합니다. 이 과정에서~/.age.key파일에서 공개 키를 추출하여 사용합니다.bash echo YYYYYY | age -r $(awk '/public key:/ {print $4}' ~/.age.key) -o ~/.totp.rubygems.age참고: 명령어 앞에 공백을 추가하면 셸 기록에서 제외될 수 있지만,ps명령으로는 여전히 노출될 수 있으므로 다중 사용자 시스템에서는 주의가 필요합니다.
사용법
-
OTP 생성 테스트:
totp-cli generate totp rubygems.org명령 실행 후totp-cli암호를 입력하여 6자리 OTP 코드를 확인합니다. -
암호 복호화 테스트:
age -d -i ~/.age.key ~/.totp.rubygems.age명령을 실행하여 Touch ID 또는 사용자 암호를 통해 암호화된 암호가 올바르게 복호화되는지 확인합니다. -
자동화 스크립트 구축: 위 두 과정을 통합하여 OTP를 자동으로 생성하는 실행 가능한 스크립트(예:
otp_rubygems)를 작성합니다.bash #!/bin/bash export TOTP_PASS=$(age -d -i ~/.age.key ~/.totp.rubygems.age) totp-cli generate totp rubygems.org이 스크립트는age를 통해 TOTP 암호를 복호화한 후, 환경 변수를 통해totp-cli에 전달하여 OTP를 생성합니다. -
Rubygems 배포 통합: 필자는 이 스크립트를 Hoe 설정에 연동하여
rake release실행 시GEM_HOST_OTP_CODE=$(otp_rubygems)환경 변수를 자동으로 설정하도록 하였습니다. 이를 통해gem push명령이 자동으로 OTP를 사용하게 됩니다. 다음 릴리스 시 Touch ID 또는 사용자 암호 프롬프트가 표시되면, 인증 후 자동으로 젬이 게시됩니다.