[github] 원격지 접근시 ssh 공개키 인증 방식 (+개인키는 windows와 wsl에서 별도로 둬야 한다)
- 포스팅 내용 -
■ 인증 문제를 만나다
■ 키 등록 및 인증 방법
■ Github의 ssh 인증 살펴보기
■ 윈도우+WSL 유저 주의
■ 인증 문제를 만나다
원격 저장소에 접근하려다가 username과 password를 요구받았다.
오늘 갑자기 요구받았다.
(왜? 그건 모르겠다.)
Username for 'https://github.com': ~~
Password for 'https://github.com': ~~~~
그래서 password에 token을 입력하고 Authentication에 성공했는데, 디스크에 저장해두거나 캐싱해두지 않으면 매번 token을 입력해야 하더라. 캐싱은 유효기간이 귀찮고, 디스크 저장은 안 내켰다.
음.. 다시 안 뜨게 하고 싶은데...!
그래서 ssh 공개키 인증 방식을 선택했다.
* ssh는 암호화된 원격 접속 프로토콜이다. secure shell의 줄임말이다. 현재 나는 github 원격 저장소에 접속하기 위한 인증 문제를 만나고 있다. 내가 원격지 서버에 접속할 때, password로 인증하지 않고 key로 인증하는 방식이다. key를 가지고 있어야 하기 때문에, 보안 수준이 password(로그인)보다 높다.
■ ssh 키 등록 및 인증 방법
* 검색하면 더 자세히 나온다.
0. 원격지 주소를 ssh 방식으로 등록한다.
1. pc에서 공개키/개인키 생성하기
ssh-keygen을 통해 키를 생성한다!
(이메일: 깃허브 이메일)
ssh-keygen -t rsa -C “kye3314@gmail.com”
2. 생성된 공개키/개인키를 확인
.ssh 디렉토리에 공개키와 개인키가 생성된다.
3. 공개키인 id_rsa.pub 내용을 github ssh keys에 등록하자.
* 참고: 커맨드는 아래와 같다.
(윈도우) type id_rsa.pub
(리눅스) cat id_rsa.pub
4. 문제 해결 완료!
Github에 공개키를 등록했으므로
내 컴퓨터의 개인키를 통해 인증이 가능해진다.
■ Github의 ssh 인증 살펴보기
Github에 ssh 키 등록을 하기 위해서
암복호화 지식 리마인드를 해보자.
인생을 살며 암복호화 키워드가 나올 때마다 대칭키 비대칭키를 배웠다.
오늘 만나볼 github 인증에서는 비대칭키를 사용한다.
비대칭키는 암호화키(공개키)와 복호화키(개인키)가 다르다.
흔하게 인증(전자서명)에 이용되는 방식이다.
비대칭키의 예를 들면 RSA가 있다.
교과서적으로 배우던 것인데, 이번에 직접 공개키랑 개인키의 정체를 직접 확인해본 날이다!
직접 생성되는 걸 보니까 아주 신기한데?
본론으로 돌아와서,
github ssh 암복호화 과정은 간단히 이렇다.
1. 내가 github 저장소에다가 pc의 공개키를 등록한다.
2. 이제 github은 pc의 공개키를 알고 있다.
3. 내 pc에서 github (remote)에 접근할 때 (push 등..) 이른바 전자서명(:암호화)을 해서 인증한다. 내가 가지고 있는 개인키로 인증하는 것이다.
다시 말을 깔끔히 정리해봤다.
"github에다가 pc의 RSA 공개키를 저장(등록)해두고, 나는 pc의 개인키를 통해 Authentication을 확인한다."
비대칭키라는 것을 다시 한번 짚어보니까 이젠 이 말이 이해가 간다.
* Github 공홈에서도 connecting to github with ssh를 안내하고 있으니까 참고합시다!
https://docs.github.com/ko/authentication/connecting-to-github-with-ssh/
■ 윈도우+WSL 유저 주의
* 나는 wsl 환경에서 작업하는 것을 좋아한다.
그러나 매번 wsl의 /mnt에서 작업중이라는 것을 인지하고 cli를 사용하지는 않아서
이번 ssh key 생성/사용 과정에서 옳지 못한 행동을 하게 되었다.
__ 옳지 못한 문제상황은?
ssh-keygen을 windows상에서 하고 만들어진 공개키를 github에 등록했다.
그런데 remote 접근(인증 시도)은 wsl상에서 했다.
인증이 안되더라!
yenny@yenyeny:/mnt/c/Users/kye33/Desktop/jpa-study/jpashop$ git push origin main
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
__잠시 헷갈렸던 부분!
이상하다.. wsl home 하위에서 말고 /mnt/c/Users/kye33/ 하위에서 진행했는데도 안되나?
네! 근본적으로 wsl 환경이고, 당연히 현재 환경의 home도 wsl home이니까 그럴 것이라고 생각합니다. 개인키는 민감해서 다른 사용자의 read write execute 권한 부여가 불가능하다고 합니다.
__ssh-keygen할 때 windows 환경과 wsl 환경은 별도라는 것을 인지해야 한다.
그래서 github에서 ssh key 등록할 때 본인이 각각 별도로 등록해줘야 한다는 것을 유의하자. (개인키의 특성)
나는 둘다 등록해놓았다.
* 하나의 pc에 두개의 키가 존재하기 때문에 관리측면에서 좋지 않다고 말할 수도 있다. 하나의 키로 관리하고자 한다면 다음 포스팅도 참고할 수 있을 것 같다. 동일한 개인키를 wsl, windows 유저 홈에 각각 복사해서 사용하는 방법 및 관련 설명 글이다. https://webdir.tistory.com/547
* 위 포스팅에 의하면 개인키는 민감하기 때문에 다른 사용자의 읽기/쓰기/실행 권한을 부여할 수 없다고 한다 (그런 권한이 존재하면 ssh는 그 개인키를 무시해버린다고 한다) 그럼 내 문제상황이 조금 더 이해가 간다.
이것저것 많은 공부가 되었다.