1. VS Code 의 Github 2개 계정 설정
Github의 인증은 예전부터 SSH Key기반으로 제공을 해주고 있었으며, 서비스가 강화되면서 더 보안이 높은 인증들이 지원이 되고 있다.
Linux에서 설정 한다고 하면, 사실 어렵지 않을 거라고 생각되어지며, Window 개발 환경이라면, 매번 제약이 따른다.
사실 Linux에서 개발하는 게 가장 편하지만, 어쩔 수 없이 Window 기반으로 설정에 대해 정리하다.
- Github의 SSH Key 기반 2개 계정 설정
Github 의 연결되는 거의 기본 인증 방식으로 SSH기반으로 사용하며 크게 어렵지는 않다.
인터넷에 뒤져 보면 쉽게 가능하며, Github 의 신 기능들을 사용하는데, 많은 제약이 따른다.
SSH 기반으로 한다면, 기본 기능만 사용한다고 생각하면 될 것 같다.
- Github의 SSH Key 추측 과 결론
Github SSH Key로만 인증하여 할 경우, Github Action 와 Github Project 연결도 되려나 처음 생각했으나, 이것은 나중에 보니 다 나의 멍청한 의심인 것 같다.
SSH기반으로 하면, Github Action 에 제한 있을 줄 알았는데, 별도 PAT(Personal Acess Tokens) 발급 받아서 하면, 제한된 기능이 동작이 된다.
Github Action (Secret)
Github Project or Action 에서 관련 관련 정보들이 필요할 경우가 있다.
- Github Action
처음 Github Action 기능 출시 할 때만 해도 영문 Manaul로 삽질 무지 했는데, AI(ChatGPT)가 너무 좋아져서 구지 이걸 작성을 직접 해야 하나 의문이 든다.
- Github HTTP PAT(Personal Acess Tokens)
PAT나온 지는 꽤 되었으며, 나도 사용한 지가 꽤 되었는데 매번 사용 설정이 좀 헷갈린다.
PAT 기반 설정하는 방법은
Github 의 우측 프로필 아이콘-> Settings -> Developer Settings
말 그대로 PAT는 Token 이며, Hash 값이며 Password 사용하는 기능이다.
발행 시 한번 만 복사할 기회가 주며, 그 다음에는 볼 수가 없다.
그렇다고 너무 겁먹을 필요도 없는 게, 실수를 해도 다시 발행하면 되니 문제 없다.
PAT 토큰, API Key 값과 비슷하며, Password 사용되어진다.
- PAT(Personal Access Tokens)
- Fine-grained tokens : 보안이 더 강화 되어 일일이 다 설정을 해야 하며 까다롭다.
- Tokens( Classic) : 일단 간단하게 쉽게 사용 가능 --> 가능하면, 이걸 선택
- repo : Git 각 Respository 접근
- gist : GIST
- project : Project 기능
- workflow : Github Action
이외 본인이 더 추가 할게 있다면, 읽어보고 더 선택하자 (추가적으로 변경도 가능하다)
Codespace 같은 경우는, Web broswer에서 직접 VS Code가 실행이 되어진다.
기간은 Custom으로 한 1년 설정하면 될 듯하다.
1.1 Window 의 자격 증명 (PAT 1개 설정)
일단 HTTPS 기반의 PAT로 1개의 계정을 설정을 해보자.
- Window 자격 증명 관리자( 실행 후 1개 계정 추가 )
- 제어판(Control Panel) → 사용자 계정(User Accounts) →자격 증명 관리자(Credential Manager)
- 우측 Window 자격 증명 (Credential Manager)
- 아래 일반 자격 증명 추가
- 인터넷 또는 네트워크 주소: git:https://github.com
- 사용자 이름: name
- 패스워드: Token
상위처럼 설정하고 아래와 같이 설정하면, 상위 1 개로 모두 관리가 되어진다.
- Repository Git 의 설정 확인
- Resository Git 설정(config) 확인 :
- gitconfig 분석: 각 아래로 gitconfig 분리되면서, 각 차이 구분
- system : Git 설치되면서 설정 git/etc/gitconfig
- global : 이 계정에 적용되어진 .gitconfig
- local : 각 Respository 설정 .git/config
- user.name
- user.email
- remote.xxxx 확인
- .gitconfig 위치 확인 : global 기반으로 확인
- .gitconfig 파일의 위치 파악하고 변경 사항 확인 과 Backup
- 본인이 직접 설정을 하고, 원하는 대로 확장 분리해서 설정
> git config -h // git config 관련 명령어들 확인
> git config --list // git config 설정된 것 확인
> git config --list --show-origin --show-scope // globla/system 위치 확인
- .gitconfig 위치 확인 과 각 설정 확인
> git config --list --show-origin --show-scope //system 보단 global에서 설정변경
```
system file:C:/Program Files/Git/etc/gitconfig filter.lfs.required=true
system file:C:/Program Files/Git/etc/gitconfig http.sslbackend=openssl
system file:C:/Program Files/Git/etc/gitconfig http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
system file:C:/Program Files/Git/etc/gitconfig core.autocrlf=true
system file:C:/Program Files/Git/etc/gitconfig core.fscache=true
system file:C:/Program Files/Git/etc/gitconfig core.symlinks=false
system file:C:/Program Files/Git/etc/gitconfig pull.rebase=false
system file:C:/Program Files/Git/etc/gitconfig credential.helper=manager-core
system file:C:/Program Files/Git/etc/gitconfig credential.https://dev.azure.com.usehttppath=true
system file:C:/Program Files/Git/etc/gitconfig init.defaultbranch=master
global file:C:/SPB_Data/.gitconfig core.autocrlf=true
global file:C:/SPB_Data/.gitconfig
...
```
- Repository Git 의 설정 변경
global 옵션이 들어가면, 거의 default 사용 생각하면 된다.
# (중요) 자격 증명 의 Respository 마다 저장되는 것 방지 하고 상위 1개의 기반으로 사용
> git config --global credential.useHttpPath false
# GCM(Git Credential Manager) 통일 (자격증명)
> git config --global credential.helper manager-core
# (Global) 본인 User 설정
> git config --global user.email "xxxx"
> git config --global user.name xxxx- Git의 기본 설정 값 (.gitconfig) 확인 과 변경
global로 설정되면, .gitconfig에 다 저장되어 관리되어지며, 이곳에서 직접 설정해도 좋다
```
[user]
name = xxx
email = xxxx
[credential]
useHttpPath = false
helper = manager-core
```
- Remote 정보 확인 및 설정
> git remote -v
> git remote set-url origin https://github.com/<org>/<repo>
- 실제 Respository 사용할 경우
> git fetch
> git pull origin main
> git clone ssh:// or https://
> git push
2. Window 의 자격 증명 (PAT 2개 구성 설정)
일단 HTTPS 기반의 PAT로 2개의 계정을 설정을 해보자.
- 자격 증명 관리자 2개 추가
- 제어판\사용자 계정\자격 증명 관리자
- 우측 Window 자격증명
- 아래 일반 자격 증명 추가
- 인터넷 또는 네트워크 주소: git:https://github.com
- 사용자 이름: name
- 패스워드: Token
2.1 Git 의 설정(.gitconfig) 재구성
나의 경우, 각 Directory 마다 다르게 설정이 되게 원해서 아래와 같이 설정 구성.
우선 상위에서 찾은 global .gitconfig 파일 위치를 찾아서,
기존 파일(.gitconfig) 1개의 단일 구성이 아니라, 2단계 재구성하자
- Git 의 기본 설정(.gitconfig) 값 파일 구성
- .gitconfig : 전체 설정으로 동일하게 적용
- .gitconfig-personal : 특정 Direcoty 의 나의 프로젝트에만 부분 적용
- .gitconfig-company: 특정 Directory 의 회사 프로젝트에만 부분 적용
- .gitconfig 설정 구성
```
# 공통
[core]
autocrlf = true
# Github 계정-1 HTTPS+PAT
[includeIf "gitdir/i:D:/Works/Project_personal/**"]
path = C:/SPB_Data/.gitconfig-personal
# Github 계정-2 HTTPS+PAT
[includeIf "gitdir/i:D:/Works/Project/**"]
path = C:/SPB_Data/.gitconfig-company
# useHttpPath False 가 2개의 User를 제공못함
[credential]
useHttpPath = false
helper = manager-core
```
- .gitconfig-company
```
[user]
name = xxxx
email = xxxxx
```
- .gitconfig-personal
```
[user]
name = xxxx
email = xxxxx
```
- Git의 설정 재 확인
.gitconfig 위치 와 .gitconfig-company 와 .gitconfig-personal 각 확인
> git config --list --show-origin --show-scope
처음에 상위처럼 하면, 될 줄 알았으며, 될 거라고 생각을 했다.
하지만, 보안 이슈로 상위처럼 2개의 계정으로만, 쉽게 자격 증명이 되어지지는 않는다.
1개의 계정일 경우는 크게 문제가 없지만, 2개부터는 httppath false 로는 안되어지는 것을 알았다.
즉 상위처럼, 간단히 2개 설정으로 관리 할 수 없다.
- HTTPS 통해 SSH 연결
이 방법도 생각을 해보았으나, Username 분리가 되지 않아 이 부분 포기~
2.2 Git 기본 설정 값 보완
HTTPS 기반의 PAT로 사용을 2개 이상 사용하고 싶다면, credential.useHttpPath true 옵션설정하면,
HTTPS PAT로 2개의 계정 이용은 가능하지만, 자격 증명 관리하기가 너무 힘들어 이 방법은 그냥 포기했다.
- Git의 설정 재 확인
# "Repo 경로까지 쓰는 저장" true 만
> git config --global credential.useHttpPath true
매번 Repository가 자격 증명에 등록되는 구조로 자격 증명을 보면, 모든 Repository 등록되어, 관리가 힘들다
안 쓰기로 결정함
3. Window 의 계정 2개 (PAT 1개 + SSH 1개 혼합 구성)
- 자격 증명 관리자 2개 추가
- 제어판\사용자 계정\자격 증명 관리자
- 우측 Window 자격증명
- 기존 2개에서 1개 삭제
- 나의 결론
현재 이 방법으로 사용하고 있으며, 분리해서 잘 동작을 전체 확인을 하였다.
SSO까지는 별도로 언급을 안 하겠으며, 잘 동작하여 이걸로 사용하기로 최종 결정하였다.
더불어, 구지 2개가 아니라, SSH이므로 여러 개로도 설정 가능하다
3.1 Git 의 설정(.gitconfig) 재구성
우선 상위에서 찾은 global .gitconfig 파일 위치를 찾아서,
기존 파일(.gitconfig) 1개의 단일 구성이 아니라, 2단계 재구성하자
- Git 의 기본 설정 값 파일 구성
- .gitconfig : 전체 설정으로 동일하게 적용
- .gitconfig-personal : 특정 Direcoty 의 나의 프로젝트에만 부분 적용
- .gitconfig-company: 특정 Directory 의 회사 프로젝트에만 부분 적용
- .gitconfig 설정 구성
```
# 공통
[core]
autocrlf = true
# Github 계정-1 SSH
[includeIf "gitdir/i:D:/Works/Project_personal/**"]
path = C:/SPB_Data/.gitconfig-personal
# Github 계정-2 HTTPS+PAT
[includeIf "gitdir/i:D:/Works/Project/**"]
path = C:/SPB_Data/.gitconfig-company
```
- .gitconfig-company
HTTPS 이므로 관련 부분 설정
```
[user]
name = xxxx
email = xxxxx
[credential]
useHttpPath = false
helper = manager-core
```
- .gitconfig-personal
SSH로 연결이 잘 안되어, 아래와 같이 직접 Core에 sshCommand 주어 진행
```
[user]
name = xxxx
email = xxxxx
[core]
sshCommand = C:/Windows/System32/OpenSSH/ssh.exe -F C:/Users/jhlee/.ssh/config
```
3.2 SSH의 Key 생성 과 Github 설정
Window에서 Github 설정을 위해서 SSH 관련 설정을 진행하자.
새 SSH 키 생성 및 ssh-agent에 추가
GitHub 계정에 새 SSH 키 추가
- SSH key 생성 과 확인
ECDSA or RSA 도 다 괜찮으니, 본인 원하는 것으로 생성
> ssh-keygen -t ed25519 -C "your_email@example.com" -f "$env:USERPROFILE\.ssh\id_ed25519" // 엔터 2번
> cd $env:USERPROFILE\.ssh\
- Github에 Public Key 등록
id_ed25519.pub
상위 Github Manual 더 자세히 나오므로 그곳을 참조 하시길~
3.3 SSH Config 설정
상위에서 만든 Key 기반으로 Github 설정 .ssh/conifg 추가하여 설정하자.
- SSH 동작 확인
> ssh -V
OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2
- .ssh/config
```
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
```
- SSH 기본 테스트
> ssh -T -v git@github.com // 상위 .ssh/config -> hostname
....
Hi JeonghunLee! You've successfully authenticated, but GitHub does not provide shell access.
SSH 연결 테스트
3.4 Git의 설정 확인 및 테스트
상위에서 우선 .gitconfig 위치를 찾아 아래와 같이 1개의 구성이 아니라 단계 별로 구성해보자
본인의 Respository로 가서, 이제 각 Git 의 동작들 을 확인을 해보자
- Git의 설정 재 확인
- .gitconfig
- .gitconfig-company
- .gitconfig-personal
상위 부분 다 적용되었는지 확인
> git config --list --show-origin --show-scope
- Git의 기존 SSH 설정 삭제 (나는 사용)
> git config --unset core.sshCommand
- Git 의 Remote 정보 확인 및 설정 (HTTPS -> SSH변경)
> git remote -v
> git remote set-url origin ssh://github.com:<user>/<repo> // 상위 .ssh/config hostname
> git remote set-url origin github.com:<user>/<repo> // 상위 .ssh/config hostname
- Git Remote 접근 가능 확인
> git ls-remote origin
- Git 의 TEST
> git pull origin main





