Development/개발일지

[MINGW] Windows VSCode에서, 각각 Repository가 서로 다른 public key 를 가지고 git commit, git push 되게끔 설정하기

사이바 미도리 2024. 12. 25. 16:17

https://saiba-midori.tistory.com/9 에서 이어진다.

위의 것은, WSL2의 터미널상에서 push하기 위함이었지만

WSL2의 VSCode가 아닌, Windows의 VSCode에서, gitkraken으로 무지성 push를 하기 위해서는 MINGW64를 건드려야 한다.

왜냐하면 Windows의 VSCode의 git은 MINGW64의 git 발사대에 불과하니까.

(필요성: C# Linter를 WSL2의 VSCode에 또다시 따로 설정하자니 귀찮다.

작업장소로는 그냥 Windows에 이미 setup된 C# Linter를 사용하면서도 push할때도 고민없이 VSCode상에서 딸깍해서 git push하고싶었다.)

 

먼저 global을 설정한다. 이게 있어야 일단 커밋이 된다.

MINGW상에서,

git config --local user.name hanaokaDev
git config --local user.email hanaoka2481@gmail.com

해주자.

 

그러면 commit은 되지만, 이제 push가 안될 것이다.

cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa
(엔터 갈기기)
mv id_rsa id_rsa_hanaoka
mv id_rsa.pub id_rsa_hanaoka.pub

cat id_rsa_hanaoka.pub
(복붙으로 git에 ssh pub키 등록하기)

vim ~/.ssh/config
# 적기       
Host github.com-hanaokaDev
        HostName github.com
        User user
        IdentitiesOnly=yes
        PreferredAuthentications publickey
        PasswordAuthentication no
        # BASH
        IdentityFile ~/.ssh/id_rsa_hanaoka


# 레포의 .git/config 확인용
cat ./myZombieSurvivor/.git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = git@github.com-hanaokaDev:hanaokaDev/myZombieSurvivor2.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Host 우측에 github.com 있길래,

지레짐작하고        HostName github.com 빼먹어서, 시간 1시간이나 날렸다. 아아아ㅏ 화난다.

 

아무튼, 이렇게 하면.

$ssh -T git@github.com:hanaokaDev
ssh: Could not resolve hostname github.com:hanaokaDev: Name or service not known

$ ssh -T git@github.com
git@github.com: Permission denied (publickey).

$ ssh -T git@github.com-hanaokaDev
Hi hanaokaDev! You've successfully authenticated, but GitHub does not provide shell access.

 

github.com의 -hanaokaDev를 붙였을 시에만, 딱 알맞는 id_rsa_hanaoka 개인키를 가지고 시도함을 확인할 수 있다.

참고) 앞선 포스트에서 말했다시피, git clone할 때, .com 과 :{git계정명} 사이에 -asdfasdfasdf 를 끼워넣으면, .git/config의 remote에 해당 -asdfasdfasdf 의 postfix가 그대로 붙는다.

훌륭하게 commit 이후 push까지 되는것을 확인할수있다.

 

주저리

windows 에서는 셋업 너무 귀찮아 젠장...무슨 MINGW까지 끌어다쓰냐.

그냥 native terminal의 git만 딸깍하면 끝나는 UNIX가 답이다.

뭐 그래도 배웠으니까 한잔해

 

 

여담

그냥 Bash 애뮬레이터라서 당연히 gcc 있을줄알았는데,

MINGW64에 기본 gcc가 없다는거에 놀랐다.

그 이후, MINGW64에 apt-get 이 없다는거에 2번 놀랐다.

gcc 같은 native/external library를 설치하려면 Windows에 다운받은 후, MINGW에 넣기위해 pacman이라는걸 써야하는듯하다.

일단 참고하려고 링크만 달아놓는다.

https://wikidocs.net/219850

 

1) MSYS2 설치하기

[TOC] ### MSYS2 설치 [MSYS2](https://www.msys2.org/) 공식 사이트에서 최신의 msys2 설치 파일을 다운로드 받습니다. 글을 쓰고 있는 현…

wikidocs.net

 


지피티 형님 답변

 

각각의 Repository가 서로 다른 public key를 사용하도록 설정하는 것은 여러 가지 장점을 제공합니다:

1. 보안 강화
키 분리: 각 Repository에 대해 별도의 키를 사용하면, 하나의 키가 유출되더라도 다른 Repository에 영향을 미치지 않습니다.
접근 제어: 특정 키에 대해 특정 Repository에만 접근 권한을 부여할 수 있어, 권한 관리를 세밀하게 할 수 있습니다.
2. 관리 용이성
키 관리: 여러 키를 사용하면, 각 키의 사용 용도를 명확히 구분할 수 있어 관리가 용이합니다.
키 교체: 특정 키를 교체해야 할 경우, 해당 키를 사용하는 Repository만 영향을 받으므로, 전체 시스템에 미치는 영향을 최소화할 수 있습니다.
3. 감사 및 추적
활동 추적: 각 키에 대해 별도의 활동 로그를 남길 수 있어, 어떤 키가 어떤 작업을 수행했는지 추적하기 쉽습니다.
문제 해결: 특정 키와 관련된 문제를 더 쉽게 식별하고 해결할 수 있습니다.

설정 예시
.ssh/config 파일에서 각 Repository에 대해 별도의 키를 설정할 수 있습니다:

Host github.com-repo1
    User git
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_repo1

Host github.com-repo2
    User git
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_repo2


각 Repository의 config 파일에서 원격 URL을 설정합니다:

[remote "origin"]
    url = git@github.com-repo1:username/repo1.git
[remote "origin"]
    url = git@github.com-repo2:username/repo2.git


이렇게 설정하면, 각 Repository가 서로 다른 SSH 키를 사용하여 git commit 및 git push 작업을 수행할 수 있습니다.