Github에서 보안 인증 설정 방법으로 Two Factor Authentication을 설정하는 방법에 대하여 알아보려고 합니다. 


# Github Two Factor Authentication(TFA) 설정하는 방법
얼마 전 부터 github에서 계속해서 메일이 왔습니다. 메일 제목은 다음과 같았습니다.

"Git deprectated email of Basic Auth notification"


처음 한 두 번은 그냥 무시했는데 계속 오는 걸 보니 꽤 중요한 내용인 것 같습니다... 이처럼 이메일로 Git deprectated email of Basic Auth notification 메일을 지속적으로 받는 경우 원인과 해결이 필요한데요 일단 원인은 현재 github 계정의 로그인 방식이 Basic authentication 방법의 인증을 사용하기 때문입니다.


!! 더 이상 지원하지 않는 Basic Auth 방식의 인증
메일의 주요 내용은 더 이상 패스워드 방식(Basic Auth)의 인증을 지원하지 않을 계획이므로 이를 다른 방식으로 사용해야 한다는 뜻입니다. 참고로 반드시 Two Factor를 사용해야 하는 것은 아니라고 메일 내용에 포함되어 있습니다. 아래의 경우에는 반드시 필요한 경우는 아닙니다.

- basic auth 방식을 사용하지 않는 경우
- github enterprise를 사용하는 경우 

이제 Two Factor Auth 방법을 사용하려고 합니다. 그런데 Two Factor Auth는 무엇이고 어떤 장점이 있을까요? Two Factor Auth는 말 그대로 두 가지 이상(Multi Factor)의 인증 방법을 사용하는 경우를 의미합니다. 즉 단순 id, pass가 아닌 다른 추가적인 인증 방식을 사용하는 경우가 바로 여기에 해당하죠.


단순 id, password 방식은 보안 위험에 매우 취약할 수 있습니다. 특히 서버나 소스 등에 접근할 때 별도의 보안키를 사용하거나 otp를 사용한 인증 방식을 많이 사용하죠. 이처럼 추가적으로 보안키를 사용하므로 가장 큰 장점은 역시 '보안성을 높일 수 있다'입니다.

아래 방법은 여러 방법 중 가장 많이 쓰이는 방법인데요 ~ 휴대폰에 설치된 OTP앱(가상 앱)을 사용하여 Two Factor Auth를 사용하는 방법입니다. 일단 별도의 otp 장치가 필요하지 않구요 ~ 동일한 토큰 정보가 아닌 시간에 따라 계속 값이 변하기 때문에 더 안전하다고 할 수 있습니다.

이제 아래부터는 위 이슈를 해결하기 위해서 Github에서 Two Factor Auth로 변경 및 적용하는 방법이 되겠습니다. 이를 사용하기 위해서 가장 먼저 아래의 준비가 필요합니다.
하나. Two Factor 사용(Enable)으로 설정 후 OTP 앱 설치
둘. ssh로 사용할 인증서 생성
셋. ssh를 개발환경에 설정하기
참고 단순하게 Two-factor authentication만이 목적이라면 위의 단계 중 1번 만으로 모든 과정이 끝나게 됩니다. 다만 이를 적용할 경우 더 이상 https로 접근하는 git 동기화 방식은 사용할 수가 없기 때문에 https 대신에 ssh를 사용하는 방법으로 변경해야 합니다. 그래서 2번과 3번 방법을 같이 알아봅니다.


! github 이중 보안 설정하기
첫 번째로 github의 설정으로 이동합니다. 메뉴 중에서 아래에 위치한 Account security를 클릭하면 Two-factor authentication 이름의 메뉴를 찾을 수 있습니다. 먼저 이를 활성하도록 합니다.

다음으로 OTP 앱을 등록해야만 합니다. OTP 앱의 경우 여러 앱이 사용됩니다. 사용하고 있는 otp를 사용하면 됩니다. Google OPT 역시 많이 쓰입니다. 보통 QR 코드를 사용하여 간단하게 등록이 가능하게 됩니다. 등록된 후에는 계정을 사용하여 로그인할 때 해당 otp에 나타나는 값을 입력하면 됩니다.


! 개발 환경에 인증서 추가하기
다음으로 사용할 개발 환경에서 인증서를 추가해야 합니다. 사용할 인증서를 새롭게 만들고 이를 자신의 로컬과 github에 각각 등록하는 과정입니다. 이 과정이 끝나야 서버와 github의 동기화가 가능하게 됩니다. 먼저 인증서 생성 방법을 알아봅니다. 아래는 리눅스(또는 윈도우 하위 리눅스)의 경우이며 만약 윈도우즈라면 다른 방법이 필요할 수 있습니다.
> ssh-keygen -t ed25519 -C "Account email"

위 명령어를 입력하면 home 디렉토리 안에 ./ssh 경로가 생성되고 id_ed25519.pub 이름의 인증서 파일이 새롭게 생성됩니다. 이제 cat이나 vim을 사용하여 해당 파일의 내용을 복사하거나 적어둡니다. 다음으로 git 설정에 있는 SSH and GPG keys 메뉴로 가서 New SSH key를 누르고 아까 복사했던 내용으로 새롭게 등록합니다.


! 기존 https clone된 remote url 변경하기
이제 ssh가 등록되었으니 개발 로컬 pc에서 사용중인 인증방식을 https에서 ssh로 변경해야 합니다. 보통 처음 clone 할 때 이미 설정되어 있으니remote url만 ssh 변경 후 사용합니다. 됩니다. 먼저 현재 설정된 remote origin url 값을 확인해봅니다.
// 전체 설정 리스트 보기
> git config --list

// remote origin url만 보기
> git config --get remote.origin.url

위 방법으로 현재 https로 되어 있음을 확인합니다. 이제 해당 값을 ssh로 변경해야 하죠. 아래와 같이 set-url을 사용하여 변경하도록 합니다.
> git remote set-url origin git@github.com:ProjectName.git

여기까지 앞의 1, 2, 3의 모든 과정이 끝났습니다. 모든 과정이 정상적으로 잘 등록되었다면 git 동기화가 이슈 없이 잘 동작하게 될 것입니다.


여기까지 github에서 Two Factor Authentication 방법을 알아보았습니다. 참고로 관련 문서는 아래와 같이 github 블로그에서 확인이 가능합니다.

관련 링크 바로가기 >

https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations