Github clone 받을 때 권한 문제 (git permission denied - publickey)
Clone을 받으려 하는데...
내 깃허브는 오픈된 프로젝트는 거의 관리를 안하고 보통 private repo만 주로 사용한다.
기여를 해야 겠지만 실력이...
무튼 private repo를 클론 받으려 하는데 자꾸 아래와 같이 에러를 뿜는다.
git permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists
그래서 이를 찾아보고 해결한 방법을 포스팅으로 남겨둔다.
1. SSH Key 생성
먼저 Clone 받을 환경에서 SSH Key가 필요하다.
여기에서는 Ubuntu를 기준으로 설명한다.
그런데 SSH 발급 받는 환경은 맥이나 윈도우나 비슷하기에...
터미널에서 아래와 같은 명령어를 통래서 키를 발급받는다.
$ ssh-keygen -t rsa -C "깃허브 아이디"
예시로 깃헙 id가 test@test.com 일 경우
$ ssh-keygen -t rsa -C "test@test.com"
보안 때문에 일부 내용은 지웠지만 이해를 방해하지 않기에...
Enter file in which to save the key 의 경우 key 파일 이름을 정해주는데 그냥 두면 기본 값으로 들어간다.
Enter passphrase 는 키의 암호인데 없어도 무방하다. (하지만 보안을 위해 입력해주자)
그리고 다 되면 키가 생성되는데 이름을 기본으로 둔 것으로 가정하고 설명한다.
아마 경로를 바꾸지 않았다면 홈 디렉토리 내의 .ssh에 들어가 있을 것이다.(기본 파일명은 id_rsa.pub)
이 파일을 cat 등으로 내용을 확인하고 이 값을 복사해둔다.(Github에 등록해야 하기 때문에)
그 다음은 Github로 가서 작업을 해야 한다.
2. Github 설정
깃헙가서 자기 프로필 누르고 Settings로 이동한다.
그리고 거기서 SSH and GPG Keys로 간다.
그리고 상단의 New SSH Key를 선택한다.
그리고 여기에서 Title은 별칭? 이름? 이 등록될 키에 대한 간단한 코멘트를 적자.
Key Type은 그대로 두고...
Key에는 아까 복사한 키 값을 넣고 Add SSH Key버튼을 클릭한다.
이렇게 등록이 되면 Github에서는 끝이다.
3. 다시 clone
이제 클론을 해야 하는데, 하기 전에 아래의 명령어를 통해서 키가 정상적으로 등록이 되었는지 확인해준다.
ssh -T git@github.com
근데 바로할 경우 에러가 날 때도 있다.
근데 바로 하면 안될 때가 있다.
잘 처리된 경우 아래와 같이 나오게 된다.
4. 계정과 비밀번호를 요구할 때는?
위 사진처럼 계정 비번을 입력했는데 에러가 나는 경우가 있다.(물론 올바르게 입력했다는 가정 하에..)
이 경우 2단계 인증을 쓰거나 할 경우가 있는데 이때는 토큰을 받아서 처리해야 한다.
다시 깃허브 가서 아까 메뉴에서 아래 보면 Developer settings라는 것이 있다.
이렇게 뜨는데 Fine-grained tokens는 최신 버전이다.(그래서 베타인가...)
구형과 차이점은 권한과 레파지토리를 좀 유연하게 적용할 수 있다.
궁금하면 직접 클래식으로 해보고, 신형으로 해보면 알 수 있다.
여기서는 Fine-grained tokens 버전으로 설명한다.
저기 상단의 Generate new token버튼을 클릭한다.
어지러운 입력창이 뜨는데 별거 아니고...
저기 Repository access 부분은 이 토큰의 권한을 적용할 레포지토리를 선택하는 곳이다.
나의 경우 프라이빗 레포 몇 개 선택을 했다.
그리고 Permissions항목에서 Account Permissions는 계정에 대한 것인데 나는 하나의 계정이라 굳이 설정을 건들지 않았다.
내가 건든건 Repository permissions인데 나는 Administration과 Metadata에 Read and Write권한을 줬다.
생성을 하면 아마 화면에 키를 알려줄 건데 이 키를 잘 보관해두자.
이 키가 암호가 된다.
다시 계정 비번에서 위 암호를 넣고 실행하면 잘 될 것이다.
안된다면 본인이 오타를 쳤을 확률이 높다...
그리고 계속 암호를 물어보면 귀찮으니...
git config --global credential.helper store
이 명령어를 주면 인증 정보를 스토어에 저장해서 더 이상 묻지 않게 된다.