Skip to main content

깃헙 푸시 권한 에러

· 9 min read
Junseok Yang
Football Loving Programmer

ChatGPT - GitHub Permission Error 403

깃으로 협업을 하면서 프로젝트를 진행하다 보니 코드충돌하는 것을 잡는 데 대부분의 시간을 사용해 버리게 되는 것 같다. 문제는 이러했다.

조장의 깃 레포지터리에 collaborator로 초대를 받았지만 계속해서 내 코드를 레포지터리에 푸시를 하려고 하면 푸시가 거절되는 에러 메시지가 나왔다.

에러 메시지

remote: Permission to Meezzi/flowerring.git denied to footgrammer.
fatal: unable to access 'https://github.com/Meezzi/flowerring.git/': The requested URL returned error: 403

그래서 전지전능하신 ChatGPT 의 답변으로는

means that GitHub is blocking access because the user footgrammer doesn’t have permission to push (or pull, depending on what you were doing) to the repository Meezzi/flowerring.

→ 내가 초대를 받았음에도 불구하고 푸시할 권한이 없다는 내용이었다.


챗 GPT의 해결책


🔍 원인과 해결 방법

1. GitHub 권한 문제

  • 현재 footgrammer 계정으로 로그인 되어 있는데, 이 계정은 Meezzi/flowerring 저장소에 권한이 없어요.

해결 방법:

  • Meezzi 계정으로 로그인하거나
  • 저장소의 소유자(Meezzi)가 footgrammer 계정에게 Collaborator(협업자) 권한을 줘야 해요.
    • 저장소 > Settings > Collaborators > 초대 → 해결 불가…

2. HTTPS 인증 문제 (토큰 혹은 캐시된 사용자 정보)

  • Git이 잘못된 사용자 정보나 토큰을 사용하고 있을 수 있어요.

해결 방법:

bash
복사편집
git config --global --unset credential.helper

그 다음 다시 push할 때 GitHub 사용자명과 패스워드(또는 Personal Access Token)를 입력해야 해요.

→ 해결 불가


3. SSH를 사용하는 방법

HTTPS 대신 SSH 방식을 쓰면 인증 문제가 적어요.

bash
복사편집
git remote set-url origin git@github.com:Meezzi/flowerring.git

그 전에 SSH 키를 등록해둬야 해요 (GitHub > Settings > SSH and GPG Keys).


이것을 하기 전에 HTTPS로 시도를 했다.

예전에 발급한 Personal Access Token이 있기 때문에 한번 시도를 해 봤다.

3️⃣ 올바른 인증 방식 사용하기

👉 HTTPS로 인증하려면 Personal Access Token(토큰) 필요!

GitHub은 이제 기본 비밀번호 대신 토큰 인증을 사용해요.

  1. GitHub 토큰 생성 페이지로 이동

  2. Generate new token (classic) 클릭

  3. repo 권한 포함한 토큰 생성

  4. clone할 때 아래처럼 사용

    bash
    복사편집
    git clone https://<your_token>@github.com/Meezzi/flowerring.git


SSH로 문제 해결하기

bash
복사편집
git remote set-url origin git@github.com:Meezzi/flowerring.git
git push origin main

1️⃣ 새 SSH 키 생성하기

아래 명령어를 실행하세요.

bash
복사편집
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  • "your_email@example.com" 부분을 GitHub에 등록된 이메일로 바꿔주세요.
  • 실행하면 경로를 묻는데, 그냥 Enter를 눌러 기본 경로(~/.ssh/id_rsa)에 저장하세요.
  • 비밀번호 입력하는 부분이 나오면 그냥 Enter를 눌러도 되고, 원하면 설정해도 돼요.
    • 나는 그냥 enter로 넘어가 줌

2️⃣ SSH 키를 GitHub에 등록하기

SSH 키를 생성한 후, GitHub에 등록해야 해요.

SSH 키 복사

아래 명령어를 실행해서 SSH 키를 복사하세요.

bash
복사편집
cat ~/.ssh/id_rsa.pub

그러면 다음과 같은 형태의 키가 나올 거예요.

graphql
복사편집
ssh-rsa AAAAB3...yourSSHkey...== your_email@example.com

이걸 전체 복사(Ctrl+C) 하세요.

GitHub에 SSH 키 추가

  1. GitHub SSH 키 등록 페이지로 이동
  2. "New SSH key" 클릭
  3. Title: 원하는 이름 입력 (예: "My Laptop")
  4. Key: 아까 복사한 SSH 키 붙여넣기
  5. Add SSH key 클릭

3️⃣ SSH 연결 테스트

SSH 키가 제대로 등록되었는지 확인하려면, 아래 명령어를 실행하세요.

bash
복사편집
ssh -T git@github.com

성공 메시지 예시

vbnet
복사편집
Hi Meezzi! You've successfully authenticated, but GitHub does not provide shell access.

이 메시지가 나오면 SSH 설정이 완료된 거예요! 🎉


4️⃣ SSH 방식으로 Push 설정하기

이제 origin을 SSH 방식으로 변경하세요.

bash
복사편집
git remote set-url origin git@github.com:Meezzi/flowerring.git

그리고 다시 push 해보세요!

bash
복사편집
git push origin main


이제 SSH를 사용해서 GitHub에 Push할 수 있을 거예요! 🚀


궁금증

HTTPS vs SSH 비교

HTTPS와 SSH는 Git 저장소와 통신하는 두 가지 주요 프로토콜입니다.

HTTPS의 특징

  • 인증 방식: 사용자 이름과 비밀번호 또는 Personal Access Token을 사용
  • 장점:
    • 설정이 간단하고 초보자가 사용하기 쉬움
    • 방화벽이나 프록시에서도 잘 작동
  • 단점:
    • 매번 인증 정보를 입력해야 할 수 있음
    • 토큰 관리가 필요

SSH의 특징

  • 인증 방식: 공개키/개인키 쌍을 사용한 암호화 방식
  • 장점:
    • 한번 설정하면 추가 인증 불필요
    • 더 안전한 보안
    • 자동화된 작업에 적합
  • 단점:
    • 초기 설정이 비교적 복잡
    • 일부 네트워크 환경에서 제한될 수 있음

일반적으로 개발자들은 더 안전하고 편리한 SSH를 선호하며, 특히 팀 프로젝트나 지속적인 개발 작업에서 SSH가 더 효율적입니다.


공개키/개인키 암호화 방식 상세 설명

SSH는 비대칭 암호화를 사용하는데, 이는 공개키와 개인키라는 한 쌍의 키를 사용합니다.

키 쌍의 구성

  • 공개키 (Public Key): 누구나 볼 수 있는 키로, GitHub 서버에 등록됩니다.
  • 개인키 (Private Key): 사용자만 가지고 있는 비밀 키로, 절대 공유하면 안 됩니다.

작동 방식

  1. 사용자가 GitHub에 접속을 시도할 때, GitHub 서버는 암호화된 메시지를 보냅니다.
  2. 이 메시지는 사용자의 공개키로 암호화되어 있어서, 개인키를 가진 사용자만 해독할 수 있습니다.
  3. 사용자의 컴퓨터는 개인키를 사용해 메시지를 해독하고 적절한 응답을 보냅니다.
  4. 이 과정이 성공하면 인증이 완료되고 저장소에 접근할 수 있습니다.

보안상의 이점

  • 비밀번호와 달리 키 쌍은 추측하거나 무차별 대입 공격으로 해킹하기 거의 불가능합니다.
  • 개인키가 노출되지 않는 한 매우 안전한 인증 방식입니다.
  • 중간자 공격(man-in-the-middle attack)으로부터 보호됩니다.

이상으로 오늘의 에러 헨들링 내용은 끝!

깃헙 생각보다 어려운 놈이었다..