문제 상황
현재 프로젝트를 윈도우와 리눅스 컨테이너 양쪽에서 작업을 진행하던 중, github 토큰을 등록을 하게 되었다. 깃허브 홈페이지에서 성공적으로 토큰을 발급받고, 이를 활용하여 비밀번호를 입력한 후 성공적으로 push를 할 수 있게 되었다. 문제는 이후의 push 에서도 계속해서 비밀번호를 요구한다는 점이였다. 환경이 조금 특이해서 (도커 컨테이너 ubuntu, wsl) 다양한 방법을 시도해봤는데, 시간을 예상보다 많이 쏟게 되어 기록을 위해 글을 작성한다.
Linux 환경
방법 0
git config --global credential.helper store
보안적으로 추천하지 않는 방법이다. git이 설치된 위치에서 git-core를 들어가면, git-credential-store라는 파일이 있는데, 거기에 토큰을 기록하는 방식이다. 사실 가장 편하긴 한데, 역시 보안적으로 취약하다는 점에서 권장되는 방식은 아니다.
방법 1
sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
원리는 libsecret이라는 패키지를 설치하여, 해당 패키지에 token을 저장하고 token이 필요한 경우 github는 명시한 credential.helper인 libsecret을 참고하여 인증을 수행한다.
여기까지해서 문제가 없으면 다행인데, 현재 docker 컨테이너 환경에서 작업을 진행하던 중 다음의 에러를 만날 수 있었다.
** (process:23898): CRITICAL **: 12:21:26.791: store failed: Cannot autolaunch D-Bus without X11 $DISPLAY
그래서 위의 방법이 안된다면 다른 방법을 시도해봐야 한다.
방법 2
그래서 어떻게 해결할 것이냐. git-credential-manger를 통해 토큰을 관리할 것이다.
가장 먼저 다음의 명령어로 수행이 가능하다면, 쉽게 갈 수 있다. git-credential-manager가 이미 설치된 경우이다.
git config --global credential.helper manager-core
근데, 내 컨테이너 환경에는 무슨 일이 일어났던 건지, 정상적인 git 경로에 credential-manager가 존재하지 않았다.
/usr/lib/git-core# ls git-credential*
git-credential git-credential-cache git-credential-cache--daemon git-credential-store
그래서 직접 설치해주었다.
먼저 방법 1을 수행하지 않았다면 필요한 패키지를 설치해준다.
sudo apt-get install libsecret-1-dev
다음으로 credential-manager의 패키지 파일을 다운로드하고
(여기가 조금 오래 걸린다. 서버가 빠르지 않다... 최신 버전의 릴리즈는 더 느리다...)
wget https://github.com/microsoft/Git-Credential-Manager-Core/releases/download/v2.0.498/gcmcore-linux_amd64.2.0.498.54650.deb
패키지를 설치해준다.
sudo dpkg -i gcmcore-linux_amd64.2.0.498.54650.deb
여기까지 왔다면 설치는 완료되었고, 잘 설치되었나 확인 한번 해주자.
git credential-manager version
마지막으로 git에 설치한 credential-manager를 사용한다고 등록해주면 끝난다.
git config --global credential.helper manager-core
이후 push 수행 시 문제 없이 업로드가 가능해진다.
wsl, debian
방법 0
git config --global credential.helper store
보안적으로 취약하기에 권장되는 방식은 아니다. (위의 linux 부분을 참고)
방법 1
앞의 방법으로 credential.helper를 활용하면, 다음과 같은 에러 메세지를 만날 수 있다.
could not connect to Secret Service: Cannot autolaunch D-Bus without X11 $DISPLAY
위의 credential-manager를 설치해서 해결을 할 수도 있지만, 좀 더 쉬운 방법이 있다.
바로 윈도우 쪽에 설치된 git에서 자체적으로 제공하는 credential-manager의 경로를 직접 먹여주는 것이다.
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-wincred.exe"
문제가 없다면 해당 명령 수행 이후 정상적으로 push가 추가적인 비밀번호 없이도 가능해진다.
만약 잘 안된다면 해당 경로에 git-credential-wincred.exe가 실제로 있는지 확인하고, 만약 없다면 직접 설치 이후, 설치된 위치의 credential-manager를 활용하는 방식으로 해결이 가능할 것 같다.
'etc > errors' 카테고리의 다른 글
스크립트를 통한 ssh 접속 (0) | 2023.04.07 |
---|---|
SSH를 통한 Root 로그인 불가 시 해결 방법 (0) | 2023.04.07 |
Git 충돌날 때 사용가능한 간단한 대처방법 (0) | 2023.03.26 |
[VirtualBox, Window] 호스트 전용 네트워크 설정 오류 "Querying NetCfgInstanceId failed (0x00000002)." (0) | 2022.11.22 |