two factor ์ธ์ฆ ์ฌ์ฉํ๊ธฐ
๋ฐฉํ๋ฒฝ์ผ๋ก ์ ๊ทผ ํต์ , ๊ณต๊ฐํค ์ธ์ฆ, ๊ทธ๋ฆฌ๊ณ fail2ban ์ผ๋ก ์ธ์ฆ์ ์คํจํ ํด๋ผ์ด์ธํธ ์ฐจ๋จ๋ฑ์ผ๋ก ๋ณด์์ ๊ฐํํ์ง๋ง ์ง์ PC๊ฐ ํดํน๋์ด ์๊ฒฉ์ผ๋ก ์กฐ์ ์ด ๊ฐ๋ฅํ๊ฑฐ๋ ๊ณต๊ฐํค์ ์ํธ๊ฐ ์ ์ถ๋ ๊ฒฝ์ฐ ์ฌ์ ํ ์ํ์ ๋จ๊ฒ ๋ฉ๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ ์ฌ๋ฌ ์ธ์ฆ ๋ฐฉ๋ฒ์ ํผ์ฉํ์ฌ ์ธ์ฆํ๋ Two Factor ์ธ์ฆ์ ํตํด ๋ฐฉ์งํ ์ ์์ผ๋ฉฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ผํ์ฉ ์ํธ(OTP; One Time Password) ๋ฐฉ์์ ์ ์ฉํ์ฌ SSH ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
์ผํ์ฉ ์ํธ(One Time Password)๋
์ ํต์ ์ผ๋ก ์ํธ์ ๊ฐ์ด ํน์ ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ ์ธ์ฆํด์ฃผ๋ ๋ฐฉ์์ "์ง์ ๊ธฐ๋ฐ ์ธ์ฆ(knowledge factor authentication)" ์ด๋ผ๊ณ ํฉ๋๋ค. "์ง์ ๊ธฐ๋ฐ ์ธ์ฆ"์ ๋ณ๋์ ๋น์ฉ์ด ๋ค์ง ์๊ณ ์ฌ์ฉ์๋ค์ด ์ต์ํ ์ฅ์ ์ด ์์ง๋ง ๋ณดํต ๊ทธ ์ฌ์ฉ์์ ๊ฐ์ธ ์ ๋ณด์ ์ฐ๊ด๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ ์ถ์ธก์ ์ํ ๋ฌด์์ ๊ณต๊ฒฉ์ ์ทจ์ฝํ๊ณ ์ํธ๊ฐ ์ ์ถ๋์ ๊ฒฝ์ฐ ์ ์ถ ์ฌ์ค๋ ์๊ธฐ๊ฐ ์ด๋ ค์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ํธ๋ฅผ ๋ณต์กํ๊ฒ ์ค์ ํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฐ๊พธ๋๋ก ๊ฐ์ ํ๋ ๋ฑ์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์ํธ์ ํน์ฑ์ ์ ์ถ์ ๋ํ ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ ์ด๋ ต์ต๋๋ค.
์ผํ์ฉ ์ํธ๋ ๊ธฐ์กด ์ํธ์ ๋จ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ผ๋ก ์์ฃผ ์งง์ ์๊ฐ๋ง ์ ํจํ ์ํธ๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ฌํ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ํธ ์ ์ถ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ ์ ์์ผ๋ฉฐ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ ์๋ฒ์ OTP ํด๋ผ์ด์ธํธ๊ฐ์ ๊ณต์ ๋น๋ฐ ํค(shared secret key)๋ฅผ ๋๋ ๊ฐ๊ณ ์๊ฐ์ ๋ง์ถ ํ์ ์ผํ์ฉ ๋น๋ฐ ๋ฒํธ๋ฅผ ์์ฑํ๋ TOTP(Time-Based One-time Password) ๋ฐฉ์์ ๋๋ค.
๊ตฌ๊ธ OTP ์๋ฃจ์
์ก์ ์ด ๋ฌ๋ฆฐ ๋ณ๋์ ํ๋์จ์ด ๋ฐฉ์์ OTP ์๋ฃจ์ ์ด ์กด์ฌํ์ง๋ง ์์คํ ๊ตฌ์ถ์ด ๋ณต์กํ๊ณ ๋์ ๊ฐ๊ฒฉ์ด ๋น์ธ๋ฉฐ ๋ถ์คํ ์ ์๊ณ (๋ณ๋๋ก ํด๋ํด์ผ ํ๋ฏ๋ก ๋ถ์ค์ด ์ฆ์ ํธ์ ๋๋ค.) ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ ๊ธฐ๊ฐ์ด ์ ํ๋์ด ์๊ณ ์๋ฒ์ ๊ณต์ ํ๋ ๋น๋ฐ ํค๊ฐ ์ ์ถ๋๋ฉด ๊ธฐ์กด OTP ํ๋์จ์ด๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋ก ๋ง๋ จํด์ผ ํ๋ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ๋ฌธ์ ๋ก ์ธํด ๋์ ์ด ์ฝ์ง ์์์ต๋๋ค.
์ค๋งํธํฐ ์๋๋ก ๋์ด์ค๋ฉด์ ์ค๋งํธํฐ ์ฑ ํ์์ OTP ๊ฐ ๋์ค๋ฉด์ ๋ฐฐํฐ๋ฆฌ์ OTP ํ๋์จ์ด ๋ถ์ค ๋ฌธ์ ๋ ์ด๋ ์ ๋ ํด๊ฒฐ์ด ๋์์ง๋ง ์๋ฃจ์ ๋น์ฉ์ ์ฌ์ ํ OTP ๋์ ์ ์ฅ๋ฒฝ์ด์์ต๋๋ค.
google authenticator ๋ TOTP ๋ฅผ ๊ตฌํํ ์คํ ์์ค ํ๋ก์ ํธ๋ก ์ ๋์ค์ ์ธ์ฆ ๋ชจ๋์ธ PAM(Pluggable authentication module) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํธ๋ฆฌํฐ, ๋ชจ๋ฐ์ผ app ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฏ๋ก ์ธ์ฆ์ด ํ์ํ ์๋น์ค(์: ssh ์๋น์ค)์ ์ ์ฉํ์ฌ two factor ์ธ์ฆ ๊ธฐ๋ฐ์ผ๋ก ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค.
๋จ ์์ฉ ์ ํ์ด ์๋๋ค๋ณด๋ ๊ด๋ฆฌ๊ฐ ์ฝ๊ฐ ๊น๋ค๋กญ๊ณ ์ด์์ด ๋ถํธํ ์ ์ด ์์ผ๋ฏ๋ก ๋๋์ ์๋ฒ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค๋ฉด Duo Security(https://duo.com/) ๋ Authy (https://authy.com/)๊ฐ์ OTP ์ ๋ฌธ ์๋น์ค๋ฅผ ๋์ ํ๋ ๊ฒ์ด ์ข์ผ๋ฉฐ ๊ด๋ฆฌํ๋ ์ฅ๋น๊ฐ ๋ง์ง ์๊ณ ์ด๊ธฐ ๋์ ๋น์ฉ์ด ์์ ๊ฒฝ์ฐ google authenticator ๊ฐ ์ ์ ํ ์ ํ์ ๋๋ค.
์ค์น
์ฌ์ ์ EPEL ์ ์ฅ์๊ฐ ์ค์น๋์ด ์์ด์ผ ํ๋ฉฐ fail2ban์ผ๋ก SSH ๊ฐํํ๊ธฐ ๋ถ๋ถ์ ์ฐธ๊ณ ํ์ธ์.
์๋ฒ์ฉ ๊ตฌ๊ธ otp ๋ฅผ ์ค์นํฉ๋๋ค.
$ sudo yum install google-authenticator -y
google-authenticator ์ค์
๋จผ์ ์ฌ์ฉํ๋ ์ค๋งํธ ํฐ์ ์ฑ ์คํ ์ด์์ "google authenticator" ๋๋ "google OTP" ๋ฅผ ํค์๋๋ก ๊ฒ์ํด์ ๋์จ OTP ์ฑ์ ์ค์นํฉ๋๋ค.
otp ์ฑ ์ค์น๊ตฌ๊ธ OTP ๋ฅผ ์ ์ฉํ๋ ค๋ ์๋ฒ์ ๋ก๊ทธ์ธ ํ ํ์ two factor ์ธ์ฆ์ ์ฌ์ฉํ๋ ค๋ ๊ณ์ (์: lesstif)์ผ๋ก google-authenticator ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉฐ ๊ฐ ์ต์ ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ google-authenticator -t -d --label webserver --issuer example.com -r 3 -R 30 -s ~/.ssh/google_authenticator
-t, --time-based: ์๊ฐ ๊ธฐ๋ฐ OTP ๋ฅผ ์ค์ ํฉ๋๋ค.
-d, --disallow-reuse: ์ด์ ์ ์ฌ์ฉํ TOTP ํ ํฐ์ ์ฌ์ฌ์ฉ์ ๊ธ์งํฉ๋๋ค.
- -l, --label=<label>: ์ฌ์ฉํ label ์ ์ง์ ํ๋ฉฐ ๊ตฌ๋ถํ ์ ์๋๋ก ํด๋น ์๋ฒ์ ์ด๋ฆ์ด๋ ๋๋ฉ์ธ ์ด๋ฆ๋ฑ์ ์ ๋ ฅํฉ๋๋ค. ์ฌ๊ธฐ์๋ webserver ๋ก label ์ ์ง์ ํ์ต๋๋ค.
- -i, --issuer=<issuer>: ์ฌ์ฉํ ๋ฐ๊ธ์๋ฅผ ์ง์ ํ๋ฉฐ ์ฌ๊ธฐ์์๋ ์ฌ์ดํธ์ ๋ฉ์ธ ๋๋ฉ์ธ ์ด๋ฆ์ ์ ๋ ฅํฉ๋๋ค.
- -r, --rate-limit=N: -R๋ก ์ค์ ํ M์ด๋์ ํ์ฉํ ๋ก๊ทธ์ธ ํ์๋ฅผ ์ง์ ํฉ๋๋ค.
- -R, --rate-time=M: M ์ด๋์ ํ์ฉํ ๋ก๊ทธ์ธ ํ์๋ฅผ ์ง์ ํ๋ฉฐ -r 3 -R 30 ์ 30์ด ์ด๋ด์ ์ต๋ 3๋ฒ์ ๋ก๊ทธ์ธ ์๋๋ฅผ ํ์ฉํฉ๋๋ค.
- -S, --step-size=S: OTP ํ ํฐ์ ๊ฐฑ์ ํ ์๊ฐ์ ์ง์ ํ๋ฉฐ ๊ธฐ๋ณธ ๊ฐ์ 30์ด๋ฉฐ ์ด๊ฒฝ์ฐ 30์ด๋ง๋ค ํ ํฐ์ ์๋ก ์์ฑํฉ๋๋ค.
- -w, --window-size=W: OTP ํ ํฐ์ -S ๋ก ์ง์ ํ ํ ํฐ ๊ฐฑ์ ์๊ฐ(์: 30์ด) ๋์๋ง ์ ํจํ์ง๋ง ์ ๋ ฅ์ ์ด ๋จ์๋ก ์ด๋ฅผ ๋ง์ถ๊ธฐ๋ ์ฝ์ง ์์ต๋๋ค. ์ฆ 31์ด์ ์ ๋ ฅํ ๊ฒฝ์ฐ OTP ํ ํฐ์ด ๊ฐฑ์ ๋๋ฏ๋ก ๋ฌดํจํ๋์ด ๋ฒ๋ฆฌ๋ฉฐ ์ด๋ฐ ๋ถํธํจ์ ์ค์ด์ด๊ณ -w ๋ก ์ง์ ํ ์๊ฐ๋งํผ ์์๋ก ์ ํจํ๊ฒ ๋๋ฉฐ 5๋ก ์ง์ ํ ๊ฒฝ์ฐ ํ ํฐ ๊ฐฑ์ ์๊ฐ์ด 30์ด๋ผ๋ฉด 35์ด๊น์ง ํด๋น OTP ํ ํฐ์ด ์ ํจํฉ๋๋ค.
- -s, --secret=<file>: google otp ์ secret ์ ์ ์ฅํ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ฉฐ ๊ธฐ๋ณธ ์ค์ ์ $HOME/.google_authenticator ์ด์ง๋ง SELinux๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ssh ๋ฐ๋ชฌ์ ์ ๊ทผ์ ์ฐจ๋จํด์ ์ ๋๋ก ๋์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก SELinux ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ .ssh ํด๋์ ๋ฃ์ด์ผ ์ ๋๋ก ๋์ํ๋ฉฐ SELinux ์ ๋ํ ๋ด์ฉ์ ๋ค์ ์ฅ์์ ์์ธํ ๋ค๋ฃน๋๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด URL ๋ฌธ์์ด์ด ํ์๋๋ฉฐ ํ ์คํธ๋ก QR ์ฝ๋์ secret key๊ฐ ํ์๋ฉ๋๋ค. ๊ตฌ๊ธ OTP ์ ์ฌ์ดํธ๋ฅผ ๋ฑ๋กํ๋ ค๋ฉด ์๋์ secret key ๋ฅผ ์ ๋ ฅํด์ผ ํ์ง๋ง ๋ฒ๊ฑฐ๋ก์ฐ๋ฏ๋ก QR Code ๋ฅผ ์ค์บํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค. ์๋์ ๋ฌธ์์ด์ ๋ณต์ฌํด์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ ฅํ๋ฉด QR ์ด๋ฏธ์ง๊ฐ ๋จ๋ฉฐ ์ด๊ฒ์ google OTP ์ฑ์์ ์ฐ๊ฒฐํ๊ธฐ ์ํ QR ์ด๋ฏธ์ง์ด๋ฏ๋ก ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ์ง ์๊ณ ์ด์ด๋ก๋๋ค.
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/webserver%3Fsecret%3DIVS7VVNOVJ7ZKWQSXOMGNRYW6I%26issuer%3Dexample.com Your new secret key is: IVS7VVNOVJ7ZKWQSXOMGNRYW6I
์๋์ ๊ฐ์ด scratch code ๊ฐ ํ์๋๋๋ฐ ๋ง์ฝ ํฐ์ ๋ถ์คํ์ ๊ฒฝ์ฐ ์๋ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด OTP ๋ก๊ทธ์ธ์ ํ ์ ์์ผ๋ฉฐ ํ๋ฒ ์ฌ์ฉํ ์ฝ๋๋ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋น์์์ ๋๋นํ ๋ณต๊ตฌ ์ฝ๋๋ก .ssh/google_authenticator ์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ ์ ์ถ๋ ๊ฒฝ์ฐ OTP ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํด ์ง๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก ํ๋จํด์ ์ญ์ ํ๋ฉด ๋ฉ๋๋ค.
Your verification code is 323214 Your emergency scratch codes are: 73074445 94801293 33157957 70212597 49916872
์ด์ OTP ์ฑ์ ๋์์ ์ฐ์ธก ์๋จ์ ๊ณ์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค
๊ณ์ ์ค์ .
๋ฐ์ฝ๋ ์ค์บ์ ์ ํํ๊ณ 3๋ฒ์์ ๋ธ๋ผ์ฐ์ ์์ ์ด์ QR ์ฝ๋๊ฐ ์๋ ํ๋ฉด์ ์ด๊ณ ์ค์บํฉ๋๋ค.
QR Code ์ค์บ์ค์บ์ด ์ ์์ ์ผ๋ก ๋๋๋ฉด ์๋์ผ๋ก ์ฑ์ ์ด๊ธฐ ํ๋ฉด์ผ๋ก ์ด๋ํ๋ฉฐ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ถ๊ฐํ ์ฌ์ดํธ ๋ชฉ๋ก๊ณผ ํจ๊ป OTP ํ ํฐ์ด ํ์๋ฉ๋๋ค.
OTP ์ฌ์ดํธ ๋ชฉ๋ก
PAM ์ค์
์ด์ ssh ๋ฐ๋ชฌ์ด google authenticator ๋ฅผ ์ฌ์ฉํ๋๋ก PAM ์ค์ ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
PAM ์ sshd ์ค์ ํ์ผ์ ํธ์ง๊ธฐ๋ก ์ฝ๋๋ค.
vi /etc/pam.d/sshd
"#%PAM-1.0" ์๋์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ๊ณ ์ ์ฅํฉ๋๋ค.. google_authenticator ๋ ์ค์ ํ์ผ์ ์ด๋ฆ์.
#%PAM-1.0 auth required pam_google_authenticator.so secret=${HOME}/.ssh/google_authenticator ##TODO ์งํ๊ฒ ํ์ auth required pam_sepermit.so
google authenticator ์ค์ ํ์ผ์ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ ${HOME}/google_authenticator ์ด์ง๋ง ์ด ๊ฒฝ๋ก์ ์ ์ฅํ ๊ฒฝ์ฐ SELinux ๊ฐ sshd ์ ์ ๊ทผ์ ์ฐจ๋จํ๋ฏ๋ก ์ ์์ ์ผ๋ก ๋์ํ์ง ์์ต๋๋ค.
SELinux ์ ์ฐจ๋จ ์ด์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์ ์ฅ์ธ "SELinux ์ฌ์ฉํ๊ธฐ" ์์ ์์ธํ๊ฒ ๋ค๋ฃน๋๋ค.
๋ง์ฝ OTP ์ฌ์ฉ ์ฌ๋ถ๋ฅผ ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ํ๋๋ก ํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด nullok ๋ฅผ ์ค์ ์ ์ถ๊ฐํด ์ฃผ๋ฉด ๋ฉ๋๋ค.
#%PAM-1.0 auth required pam_google_authenticator.so nullok secret=${HOME}/.ssh/google_authenticator ##TODO ์งํ๊ฒ ํ์ auth required pam_sepermit.so
nullok ์ค์ ์ด ์์ผ๋ฉด ์ฌ์ฉ์์ ํ ๋๋ ํฐ๋ฆฌ์ .ssh/google_authenticator ๊ฐ ์์ผ๋ฉด OTP ๋ก ๋ก๊ทธ์ธ์ ํ๊ณ ์์ผ๋ฉด ๋ค๋ฅธ ์ธ์ฆ ๋ฐฉ์์ผ๋ก ๋ก๊ทธ์ธ์ ์ํํฉ๋๋ค.
sshd ์ค์
์ด์ ssh ์ด์ ssh ๋ฐ๋ชฌ์ด google authenticator ๋ฅผ ์ฌ์ฉํ๋๋ก PAM ์ค์ ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
/etc/ssh/sshd_config
.๋ด์ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ด ์์
ํธ์ง๊ธฐ๋ก sshd ์ค์ ํ์ผ์ ์ฝ๋๋ค.
vi /etc/ssh/sshd_config
๋ค์ ์ค์ ์ ์ฐพ์์ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํฉ๋๋ค.
PasswordAuthentication yes ChallengeResponseAuthentication yes UsePAM yes
ssh ๋ฐ๋ชฌ์ ์ฌ๊ตฌ๋ํฉ๋๋ค.
systemctl restart sshd
์ด์ ๋ชจ๋ ์ค์ ์ด ์๋ฃ๋์๊ณ ์ฌ์ฉํ๋ SSH ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์์ ์ค์ ์ ์์ ํด์ผ ํ๋ฉฐ ์ธ์ฆ ์๋จ์ผ๋ก keyboard-interactive ๋ฅผ ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
SSH Client ์ค์
SecureCRT ์ค์
- ์ธ์ ์ต์ ์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
SSH2 -> Authentication ์ "Keyboard interactive" ๊ฐ ์ฒดํฌ๋์ด ์๋์ง ํ์ธํ๊ณ ๊ฐ์ฅ ์์ ์ฌ๋ผ ์ค๋๋ก ์ค์ ํฉ๋๋ค.
SecureCRT ์ธ์ ์ค์ ์ด์ ์ค๋งํธํฐ์ ๊ตฌ๊ธ OTP ๋ฅผ ๊ตฌ๋ํ๊ณ ๋ฒ์ ssh ๋ก ์ฐ๊ฒฐํ๋ฉด ์๋์ ๊ฐ์ OTP ์ ๋ ฅ ์ฐฝ์ ๋น๋๋ค. ๊ฑฐ๊ธฐ์ ๊ตฌ๊ธ OTP ์์ ์์ฑํ ์ํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
OTP ์ ๋ ฅ์ฐฝ์ํธ ์ ๋ ฅ์ฐฝ์๋ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
์ํธ ์ ๋ ฅ ํ๋ฉด
putty ์ค์
- putty ๋ฅผ ๊ตฌ๋ํ ํ์ OTP ๋ฅผ ์ฌ์ฉํ ์ธ์ ์ค์ ์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
- Connection → SSH → Auth ์ค์ ์ ๋ค์ด๊ฐ๋๋ค.
- Authentication methos → Attempt "keyboard-interactive auth ๊ฐ ์ฒดํฌ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
Verification code: ์ ์ผํ์ฉ ๋น๋ฐ ๋ฒํธ๋ฅผ ์ ๋ ฅํ๊ณ Password: ์ ์ํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
putty ๋ก ์ฐ๊ฒฐ
ssh ํด๋ผ์ด์ธํธ ์ค์
ssh ์ปค๋งจ๋๋ Mac ์ iTerm ๋ฑ์ ssh ํด๋ผ์ด์ธํธ๋ ssh ์ ๊ธฐ๋ณธ ์ค์ ํ์ผ์ธ ~/.ssh/config ํ์ผ์ ์ฌ์ฉํ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ค์๊ณผ ๊ฐ์ด OTP ๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ฉด ๋๋ฉฐ ์๋๋ example.com ์ ์ฐ๊ฒฐํ ๊ฒฝ์ฐ ์ค์ ์์ ์ ๋๋ค.
Host example.com HostName example.com PasswordAuthentication yes ChallengeResponseAuthentication yes PreferredAuthentications keyboard-interactive
์์ ์์ ๊ฐ์ด PasswordAuthentication, ChallengeResponseAuthentication ๋ฅผ yes ๋ก ํ๊ณ PreferredAuthentications ์ keyboard-interactive ๋ฅผ ์ค์ ํ ํ์ ssh example.com ์ฒ๋ผ ์๋ฒ์ ์ฐ๊ฒฐ์ ์๋ํ ํ์ ์๋์ ํ๋กฌํํธ์ OTP ์ ์ํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
$ ssh example.com Verification code: Password:
๋ง์ฝ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์๋ฒ์ OTP ์ค์ ํ์ผ์ธ .ssh/google_authenticator ๊ฐ ๋ณ๊ฒฝ๋์๋ค๋ฉด ๊ตฌ๊ธ OTP ์ฑ์ ์ฃผ์๋ฅผ ์ญ์ ํ๊ณ ์๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค.
TOTP ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๊ณต์ ํ๋ secret key ๋ฅผ ํ์ฌ ์๊ฐ ๊ฐ์ ์ฌ์ฉํ์ฌ 1ํ์ฉ ์ํธ๋ฅผ ์์ฑํ๋ฏ๋ก ์๊ฐ์ด ํ๋ฆฌ๋ค๋ฉด ์ ๋๋ก ๋์ํ์ง ์์ต๋๋ค.
๋๊ฐ์ ์ค๋งํธํฐ์ ์๋์ผ๋ก ์๊ฐ์ด ๋๊ธฐํ๋์ง๋ง ๋ฆฌ๋ ์ค ์๋ฒ๋ ์๋๋ฏ๋ก ๋ก๊ทธ์ธ์ด ์ ๋ ๊ฒฝ์ฐ ๋ฆฌ๋ ์ค์ ํ์ฌ ์๊ฐ์ ํ์ธํ๊ณ ๋ค๋ฅด๋ค๋ฉด ๋๊ธฐํ๋ฅผ ํด์ผ ํฉ๋๋ค.
์ ์๋ ntpdate ntp.postech.ac.kr ๋ช ๋ น์ผ๋ก ํฌํญ๊ณต๋์ ์๋ฒ์ ์๊ฐ์ ์ผ์น์ํต๋๋ค.