HwangHub

[트러블슈팅] The project you were looking for could not be found or you don't have permission to view it. (@git의 권한 체크) 본문

DEV-STUDY/Git

[트러블슈팅] The project you were looking for could not be found or you don't have permission to view it. (@git의 권한 체크)

HwangJerry 2024. 3. 22. 11:20

상황은 이랬다.

  1. 싸피 내 데스크탑을 이용하고 있었다.
  2. 데스크탑 자리는 주기적으로 변경된다.
  3. 나는 지난번엔 분명 이 PC에서 git을 이용했다.
  4. 사용하고 있는 git repo 플랫폼은 git lab이다.
  5. 어느날 갑자기 remote repository에 git을 이용하여 clone과 push를 하는 작업을 하려고 하면 위와 같은 에러가 발생했다.
  6. 심지어 내 개인 repo에 push하는 것도 실행되지 않았다...(이 지점에서 무언가 단단히 잘못됨을 느낌)

 

project 경로는 copy & paste로 입력한 거라서 잘못되었을 수 없다고 판단했다.

그렇다면 권한이 문제라는 가정을 한 채로, ssh key나 access token이 만료되었나 체크해봤다. 아쉽게도 만료되어서 발생하는 문제는 아니였다. (물론 일단 다시 새로 갱신해서 등록도 해봤고, 해결되지 않았다.)

 

프로젝트 레포에 contributor로 등록이 되어있지 않은 건가 했지만 그것도 아니였다.

무엇이 문제인지 한참을 알아보다가 작업을 진행하는 것이 너무 딜레이되어서 일단 포기하고 당장은 노트북 환경으로 일을 처리했다.

 

일주일정도 시간이 흐른 뒤, 이를 해결해야겠다 판단하여 다시 접근을 시도해봤다. 여전히 동일한 문제가 발생하고 있어 반가우면서도 진절머리가 났다.

 

진짜 원인은 이거였다.

로컬 환경에서 git을 이용하여 remote repo에 접근할 때 자동로그인을 위해 사용되는 git ID/PW 가 나의 git 계정정보로 등록되어있지 않아서 생긴 문제였다.

 

늘상 개인 노트북 환경만을 사용하여 git을 사용하다보니 자동 로그인의 존재조차 잘 인지하지 못하고 있었다. git에서는 해당 레포에 권한이 있는 유저가 접근을 하는건지 확인하는 과정에서 로컬에 저장된 계정 정보를 사용한다. git 시스템은 사용자의 편의를 위해 저장된 계정 정보를 이용하여 자동로그인을 수행하는데, 나는 이를 인지하고 있지 않아서 ssh key와 access token만을 확인했던 것이다. 따라서 아래 과정을 통해 사용자 계정 정보를 수정해줘서 해결할 수 있었다.

 

해결법

git bash를 열고 아래 명령어를 입력한 뒤, 다시 clone 및 push를 시도하니까 문제없이 해결되었다.

git config --system --unset credential.helper // 계정정보 저장 x => 자동로그인 비활성화 (이 커맨드는 저장된 계정 정보를 지우기 위해 수행했음)
git config --system credential.helper store // 계정정보 다시 저장

git config user.name $유저아이디
git config user.email $유저이메일

 

+++

계정 정보는 ~/.git-credentials에 저장되게 된다. 위 커맨드 과정은 해당 파일에 저장되어 있던 계정 정보를 비활성화(지움)한 뒤, 다시 저장하겠다는 선언을 해준 거다.

 

위 명령어 이후에 최초로 push나 clone을 하면 계정 정보를 물을텐데, 그 때 내 계정 정보를 입력해주면 다음부터는 묻지 않는다.

 

계정 정보 관리 정책 설정 커맨드는 아래와 같다.

 

 

인증 정보를 메모리에 넣어두고 15분동안 유지시킨다. (TTL을 15분으로 자동 세팅) 이렇게 하면 15분동안은 계정 정보를 묻지 않지만 그 이후에는 다시 입력해줘야 한다.

git config --global credential.helper cache

 

인증 정보를 디스크에 저장해두고 인위적으로 지우지 않는 이상 영구적으로 불러온다. 이렇게 할 때 계정 정보가 ~/.git-credentials에 저장되는 거다.

git config --global credential.helper store

 

위 store 명령어의 경우 평문으로 냅다 저장하기 때문에 외부에 만약 노출되면 누구나 나의 로그인 정보를 탈취할 수 있다는 위험성이 존재한다. 따라서 windows 또는 mac os 에서 제공하는 keychain 암호화를 이용하여 계정 정보를 저장하려면 wincred 명령어를 수행하면 된다.

# windows
git config --global credential.helper wincred

# mac os
git config --global credential.helper osxkeychain

 

위와 같이 설정한 git config 내용을 확인하고 싶다면 아래 명령어를 이용하면 된다.

# local 설정
git config  --list
# Global 설정
git config --global --list

 

출처 : https://pinedance.github.io/blog/2019/05/29/Git-Credential


 

아래 내용은 참고했던 블로그에서 안내하는 정보이다.

git credential 정보를 리셋하는 코드 (* 관리자 권한 필요)

// 1.local에서 unset
git config --local --unset credential.helper  

// 2.global에서 unset
git config --global --unset credential.helper 

// 3.system에서 unset 
git config --system --unset credential.helper

출처: https://oizys.tistory.com/64 [우당탕탕 개발:티스토리]

 

--

 

유저네임이랑 email도 unset 해줘야 하더라.

git config --local --unset user.name

git config --global --unset user.name

git config --system --unset user.name

 

user.name 대신 user.email 하면 user.email 을 초기화하며, git config user.name (~~~) 하면 설정 된다.


 

아래 내용은 git Lab에서 안내하는 각 인증 정보의 사용처이다. 간단히 말하면 SSH keys는 해당 컴퓨터와 gitlab 서버 간의 ssh 프로토콜 통신 연결을 수립할 때 사용되며, access token은 gitlab api를 사용할 때 사용자 인증에 사용된다.

 

참고로, github에서는 password를 더이상 사용하지 않고 사용자 인증에 access token만을 사용하고 있다.

Personal Access Tokens

  • for each application you use that needs access to the GitLab API.
  • to authenticate against Git over HTTP.

SSH Keys

  • allow you to establish a secure connection between your computer and GitLab.
Comments