푸시를 하려고 했더니 뜨는 아래와 같은 오류를 해결하기 위해 방법을 알아보았다.
나는 2단계 인증을 사용하기 때문에.. 퍼스널 액세스 토큰을 쓰기엔 1년마다 만료되는 게 너무 귀찮았기 때문에 SSH연결로 해결하였다.
$ git push
remote: Permission to Cafe9Kitsune/smart-measuringcup.git denied to enerGneer.
fatal: unable to access 'https://github.com/Cafe9Kitsune/smart-measuringcup/': The requested URL returned error: 403
1. SSH 키 생성
window환경이었기에 우선 명령 프롬포트를 실행후 공개키를 생성했다.
ssh-keygen -t ed25519 -C "your_email@example.com"
- 위 명령어를 입력하면 각각 저장 경로와 패스프레이즈(비밀번호 같은 것)를 설정하겠냐는 질문이 나오는데, 저장경로는 그냥 엔터치고 넘어가면 제시하는 기본 저장경로&파일명으로 생성된다.
- 나는 다음과 같은 기본 저장 경로&파일명을 사용하였다.
C:\Users\enerG\.ssh\id_ed25519
- 패스프레이즈를 설정했다.
- 나는 다음과 같은 기본 저장 경로&파일명을 사용하였다.
이렇게 하면 개인 키(id_ed25519
)와 공개 키(id_ed25519.pub
)가 생성된다.
2. SSH 공개 키 확인
윈도우 명령 프롬프트에서 공개 키를 확인하기 위해기본 경로가 C:\Users\enerG>
로 시작하므로 .ssh
디렉터리로 이동했다.
cd .ssh
아래의 명령어로 공개 키 내용을 확인하면,
type id_ed25519.pub
아래와 같이 공개키가 출력되는데, 뒤의 메일주소까지 결과물을 전부 복사하면 된다.
ssh-ed25519 공개키내용 your_email@example.com
3. SSH 공개 키 등록
이제 GitHub 계정에 공개 키를 등록하기 위해 GitHub SSH 키 추가 페이지로 이동하여 우측의 New SSH Key
를 클릭한다.
- Title: My Windows SSH Key 처럼 원하는 이름 입력.
- Key: 위에서 복사한 공개 키를 붙여넣기하고 저장한다.
4. SSH 연결 테스트
SSH가 GitHub와 제대로 연결되었는지 확인하려면 아래의 명령어를 입력하면 된다.
ssh -T git@github.com
그러면 아래와 같은 질문이 뜨는데, Git이 GitHub 서버를 처음으로 접속하면서, 해당 서버를 신뢰할 수 있는지 확인하는 절차기때문에 yes라고 입력하면 된다.
The authenticity of host 'github.com (20.27.177.113)' can't be established.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
그러면 아래와 같은 결과 메시지가 출력된다.
Hi your_username! You've successfully authenticated, but GitHub does not provide shell access.
5. Git 원격 URL을 SSH로 변경
git remote -v
위의 명령어를 입력했을 때, 출력되는 리포지토리 주소에 https
가 붙어있다면 원격 URL를 SSH로 변경해줘야한다. 다음과 같이 입력한다.
git remote set-url origin git@github.com:your_username/your_repository.git
다시 git remote -v
로 확인해보면 아래와 같이 뜨는데, SSH로 연결된 것이다.
origin git@github.com:your_username/your_repository.git (fetch)
origin git@github.com:your_username/your_repository.git (push)
이제 git push를 해보면
Enter passphrase for key '/c/Users/enerG/.ssh/id_ed25519':
패스프레이즈를 입력하려고 하는데, 매번 이런 귀찮은 작업을 할 수는 없으니.. 이것저것 알아보다가 나는.. 고심끝에 패스프레이즈를 제거했다 ㅠㅠ.. (맥은 되게 간단했는데)
패스프레이즈를 제거하는 경우 아래와 같이 입력하고, 현재 패스프레이즈 입력 후에 새로운 패스프레이즈를 입력하라고 하면 그냥 엔터를 쳐서 넘어가면 패스프레이즈가 제거된다.
ssh-keygen -p -f ~/.ssh/파일명
도저히 윈도우에서는 VScode에서 Git bash를 쓰는 경우 재부팅 후에도 패스프레이즈를 기억하도록 할 수 없었다.. 대체 왜냐..! (참고로 파워쉘에서는 됨.) 스택 오버플로우 찾아보니 뭔가.. 프로그램을 다운 받아야 한다는데 걍 귀찮아져서 나의 패배로 끝냈다.
혹시 몰라 맥의 방법이라도 공유해둡니다..
6. (Mac) 재부팅 뒤에도 패스프레이즈 입력 안 받는 법
터미널에서 아래의 명령어를 입력해서, SSH 키를 macOS키에 추가할 수 있다.
ssh-add --apple-use-keychain ~/.ssh/키 파일 명
이 과정에서 패스워드는 1회만 입력하면 된다. 이후에는 재부팅 후에도 입력할 필요가 없어진다.
그 다음으로 SSH 설정 파일을 수정해주면 되는데, ~/.ssh/config 요 경로에 있는 파일을 찾아서 아래의 내용을 추가한다. 파일이 없는 경우에는 작성하면 된다. (확장자 없는 그냥 config 라는 이름의 파일임)
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/키 파일 명