ssh 접속 2차인증(OTP) 적용

mhlee·2021년 3월 19일
1

OTP 2차 인증 시작하며

0. 배경

접근제어 솔루션이 없는경우, 2차인증(2 factor)을 적용해야 한다는 요구사항을 받았다.
가장좋은 방법은 돈으로 해결(== 솔루션 구입)하는것 이지만,
가난한 스타트업에게는 사치다.

google authentication을 이용해서 2차 인증을 적용한다.
외부 -> 서버로 접속할때는 2차 인증을 수행하지만, IDC 내에서는 pub key를 공유한 서버에는 2차인증을 수행하지 않는것이 목표다. 왜냐하면, 그러면 자동화된 배포, 배치가 모두 무너진다.
구글링을 통해 다양한 사이트를 참조했다. 만약 다른 내용이 있다면, 위 내용 때문일수 있다.

참고로, 서버는 ubuntu 20.04 LTS 버전이다.

1. google authentication 설치

sudo apt update
sudo apt -y install libpam-google-authenticator

2. ssh 설정 변경

# 우선 백업
sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.20210319
sudo vi /etc/pam.d/sshd

파일의 마지막 라인에 아래 내용을 붙여 넣는다.
구글링 해보면 nullok 값은 모든 유저에게 OTP 인증을 적용한다는 설정이라고 한다.

auth required pam_google_authenticator.so nullok

# 역시 우선 백업 먼저
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.20210319
sudo vi /etc/ssh/sshd_config

파일 내용중 아래 내용대로 설정값을 변경한다.
주석처리가 되어 있다면 주석을 풀고 값을 설정한다.

PasswordAuthentication no
ChallengeResponseAuthentication yes
UsePAM yes
PermitEmptyPassword no

PasswordAuthentication 항목이 설정파일 2곳에 존재한다.(ubuntu 20.04 기준)
중간에 주석으로 되어 있는 부분이 있고, 마지막 부분에 주석없이 존재한다.
필자는 중간에 있는 항목의 주석을 풀고 no로 셋팅했고, 마지막 라인에 있는 값은 yes 그대로 두었다.
마지막 라인에 있는 값을 no로 변경도 해보았으나, 특별히 변경된 내용은 없었다.
혹시 몰라, 처음 있던 그대로 마지막부분은 yes로 적용.

3. ssh 데몬 재기동

sudo systemctl restart sshd

4. OTP 인증 적용

# 적용대상 user 로그인 상황에서 아래 명령 적용
google-authenticator

위 명령을 수행하면, 몇가지 질문을 받는다.

  1. time based token인지 묻는것 같다. yes

  2. 토큰 재사용을 막을것인지? no (yes로 해도 무방, 대신 30초 이내 동일 토큰으로 로그인불가)

  3. 클라이언트 서버간 시간차가 있을수 있으니, 앞뒤로 몇개 더 허용할지 묻는것 같다. n (yes로 해도무방)

  4. 3번 틀리면, 30초정도 lock을 건다는 이야기 같다. y (no로 해도 무방)

5. QR URL

google-authenticator 명령을 수행하면 초반에 URL이 하나 나온다.
그리고, QR도 하나 출력된다.(너무커서 QR인지 인식이 안되는것 같지만..)

URL을 찾아 브라우저에서 열면 QR이 나온다.

또는, ~/.google_authenticator에 보면 OTP관련 설정이 있다.
그중 첫부분을 아래 URL에 붙여서 사용해도 된다.
YOUR-ID, YOUR-COMPANY는 google otp 앱 상단에 표시되는 항목이다.

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/[YOUR-ID@YOUR-COMPANY]%3Fsecret%3D[YOUR-SECRET]

ZJD3FHXXXXXXXX22B2ZY2WCKKQ
" RATE_LIMIT 3 30 XXXX124336
" TOTP_AUTH
7351XXXX
2802XXXX
2184XXXX
1033XXXX
3552XXXX

6. 구글 OTP 다운로드 및 설정

플레이스토어 또는 앱스토어에서 google otp 다운로드

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=ko&gl=US

다운로드후, 5번의 QR을 스캔하여 OTP 항목을 추가한다.

이후 ssh로 접속하면, 패스워드 확인후 verification code를 입력하라고 한다.
휴대폰의 google otp에 표시된 code를 입력하면 된다.

7. 기타

  • 설정을 하며, ssh 로그인이 안되 좀 당황했던 기억이 있다.
    오픈 준비중인 서버라 큰 문제 아니였지만, 실서버 라면 반드시 설정화일 백업후 진행을 권장한다.
    문제 생기면 설정화일 원복후 ssh 데몬 재기동한다.

  • 복수개의 서버에 각각 OTP를 적용하는것이 비효율적이라 생각되어, 모두 동일한 .google_authenticator 파일을 적용하기로 했다.
    이때, 4번과정 없이 파일만 복사하니, ssh로 접속이 안되는문제가 발생했다.
    이럴때는 우선 4번과정을 진행후 파일의 내용을 변경해보면 좋을것 같다.

profile
삽질하는 개발자

0개의 댓글