SSH OTP
Linux PAM 및 Google Authenticator의 PAM 모듈을 사용하여 SSH 로그인에 시간 기반 일회성 코드를 추가합니다.
실행 전 확인
이 Ubuntu 예제에서는 추가 PAM 모듈을 설치하고 서버 인증을 변경합니다. 기존 관리 세션과 독립 콘솔 또는 복구 액세스를 열어두세요. 시행하기 전에 각 계정을 구성하고 테스트하십시오. OTP 비밀번호와 긴급 코드를 안전하게 저장하고 절대 공개하지 마세요. 서버 시계를 동기화합니다. SSH 클라이언트가 키보드 대화형 프롬프트를 지원하는지, 자동화 및 복구 계정을 계속 사용할 수 있는지 확인하세요. 샘플 PAM 스택은 시스템 비밀번호와 OTP가 필요할 수 있는 일반 인증을 유지합니다. 공개 키와 키보드 대화형은 그 자체로 정확히 두 개의 프롬프트 또는 정확히 두 개의 요소를 보장하지 않습니다. PAM 파일, 정책 및 서비스 이름은 배포판에 따라 다릅니다. 이 예제를 macOS 또는 Windows 서버에 변경 없이 적용하지 마세요.
변경 사항을 적용한 후 새 SSH 세션에서 로그인이 가능한지와 원하는 기능이 작동하는지 확인하세요. 확인이 성공할 때까지 현재 세션을 열어 두면 필요한 경우 설정을 복구할 수 있습니다.
인증 앱
휴대전화의 TOTP 인증 앱으로 등록 QR 코드를 스캔하거나 비밀 키를 직접 입력하세요. QR 코드와 비밀 키를 보호하고 긴급 복구 코드를 안전하게 보관하세요. 휴대전화 인증 앱은 서버의 PAM 모듈과 별개입니다.
2FAS는 선택적 백업을 제공하며, 여러 기기 동기화는 Premium 기능입니다. 지원 여부는 플랫폼과 요금제에 따라 다릅니다.
사용 예제
Ubuntu에 PAM 모듈을 설치합니다. 이 모듈은 OpenSSH와 별개이며 관리자 권한이 필요합니다.
sudo apt update
sudo apt install libpam-google-authenticatorOTP를 사용할 각 계정으로 등록 도구를 실행하세요. 대화형 프롬프트에 따라 인증 앱에 계정을 추가하고 비상 코드를 안전하게 저장하세요. 표시된 비밀을 공유하거나 기록하지 마세요.
google-authenticator기존 SSH PAM 서비스 파일(일반적으로 /etc/pam.d/sshd)에서 모든 기존 계정, 세션 및 기타 규칙을 유지하면서 모듈을 인증 규칙으로 추가합니다. 이 조각은 공통 인증을 유지합니다. PAM 정책에서 시스템 비밀번호를 요청할 수도 있습니다. OTP가 필요한 경우 nullok를 추가하지 마세요.
nano로 파일을 여세요:
sudo nano /etc/pam.d/sshd@include common-auth
auth required pam_google_authenticator.so이러한 설정을 효과적인 SSH 서버 구성에 병합합니다. 이를 위해서는 공개 키와 PAM 키보드 대화형 인증이 필요합니다. 기존 포함 순서 또는 일치 블록으로 인해 결과가 변경될 수 있습니다. 전체 구성을 덮어쓰지 마십시오.
nano로 파일을 여세요:
sudo nano /etc/ssh/sshd_configUsePAM yes
PubkeyAuthentication yes
KbdInteractiveAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam시스템의 SSH 서비스 재로드 절차를 적용하기 전에 구문을 검증하고 유효한 정책을 검사하십시오. 일치 규칙이 적용될 때 관련 사용자 및 주소와 함께 sshd -T -C를 사용하십시오. 별도의 세션에서 원래 세션을 닫기 전에 키와 표시된 모든 요소를 확인하세요.
sudo sshd -t && sudo sshd -T && sudo systemctl reload ssh선택 사항: 공개 키와 OTP
공개 키 다음에 계정 비밀번호 없이 OTP만 요구하려면 SSH PAM auth 규칙을 조정해야 합니다. SSH PAM 서비스에서 common-auth를 제거하면 모든 사용자에게 영향을 주고 다른 인증 정책을 우회할 수 있습니다. 관리자와 나머지 auth 규칙을 검토하고 account 및 session 규칙, 기존 세션과 별도의 복구 수단을 유지하세요.
다음은 Ubuntu SSH PAM 설정의 일부이며 전체 파일이 아닙니다. 영향을 확인한 후에만 기존 common-auth를 주석 처리하세요. nullok를 추가하지 마세요. 다른 auth 규칙에서 추가 인증을 요구할 수 있습니다.
nano로 파일을 여세요:
sudo nano /etc/pam.d/sshd# /etc/pam.d/sshd: auth fragment only
# @include common-auth
auth required pam_google_authenticator.so위 SSH 설정을 병합한 후 실제 적용 값을 확인하세요. 출력 키는 소문자입니다. Include 순서와 Match 블록이 결과에 영향을 줄 수 있으므로 Match 조건은 연결 정보를 지정한 sshd -T -C로 확인하세요.
sudo sshd -T | grep -E '^(usepam|pubkeyauthentication|kbdinteractiveauthentication|passwordauthentication|authenticationmethods) '위 명령으로 검증하고 다시 불러온 후 별도 클라이언트 세션에서 등록된 계정과 개인 키로 접속하고 인증 앱의 코드를 입력하세요. 필수 키나 코드가 없으면 로그인이 실패하는지 확인한 다음 기존 세션을 종료하세요.
ssh -i ~/.ssh/id_ed25519 alice@server.example.comSecure Pipes는 SSH keyboard-interactive 프롬프트를 지원하며 서버가 요청한 코드를 입력할 수 있습니다. 앱 잠금 해제 OTP와는 다릅니다. OTP 공유 비밀 키는 서버와 인증 앱에 있으며 이 SSH 로그인에 Secure Pipes가 이를 저장할 필요는 없습니다.
공식 참고 자료
검토일: 2026년 10월 27일