Setting Guide

[SSH] Git/Bitbucket 멀티 계정 사용하기

Bittersweet- 2022. 11. 15. 14:44
728x90

동시에 2개의 프로젝트를 두개의 계정으로 따로 사용해야 하는 경우가 있다.

회사 계정과 개인 계정을 사용해야 할때도 그렇고 프로젝트 각각 사용해야 하는 계정이 정해진 경우도 그렇다.

 

** tip

2020년 7월 모든 Git 작업에 대해 토큰 기반 인증을 사용해야 한다고 발표했다. 2021년 8월 13일부터는 github.com에서 더이상 계정 비밀번호로 git 작업에 대한 권한을 가질 수 없었다.

 

user.name과 user.email을 global로 하지말고 프로젝트 별로 설정해서 사용하는 방법도 괜찮다는 것을 뒤늦게 알았다....

그래서 덕분에 SSH를 사용하기 위해 엄청난 시간과 공을 들여 내용을 확인하고 또 확인하고...

자주 사용하던 게 아니기에 자꾸 까먹고... 계정은 또 늘어나고... 그래서 이번 기회에 정확히 정리를 한번 해보려고 한다.

아... 씬나..

 

 

 


 

 

1. 계정마다 SSH Key를 만든다.

우선 사용하는 계정마다 우선 SSH Key를 만들어야 한다. (github과 bitbucket을 사용하는 계정이 동일한 계정일 때 SSH를 하나만 생성해도 되는지 아니면 각각 생성해야 하는지..잘 모르는데 혹시 몰라서 각각 생성했고 사용에는 문제 없었다)

 

SSH Key는 생성 시 공개키와 비공개키가 함께 만들어진다. (기본 구성이므로 선택하는 건 아니다) 생성된 비공개키는 local(클라이언트)에 위치해야 하며, 공개키는 remote(Git 또는 Bitbucket)에 위치해야 한다.

 

키 생성을 위해서 아래의 스텝을 따라해보자.

 

 

1) 우선 terminal을 열고 root에서 cd ~/.ssh로 이동한다.

만약 .ssh폴더가 없다면 ssh-keygen을 따로 설치해줘야 한다. (MacOS/Linux는 따로 설치할 필요 없다)

아래와 같이 ssh-keygen 명령어를 입력하여 키를 생성한다.

ssh-keygen -t rsa -C "user1" -f "github.com-user1"

* 함께 사용한 옵션들

- t 암호화 옵션

-C 키를 식별하는데 도움이 되는 주석

-f 파일 이름을 지정

 

 

 

2) 아래의 문구가 나오면 Key가 생성될 위치와 함께 사용할 파일명을 입력한다.

Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):[Press enter]

1)번에서 -f 옵션을 입력하지 않았다면 위와 같은 문구를 확인할 수 있다. 

간단하게 설명하고 넘어가자면 경로, 파일 이름, 암호를 설정하게 된다. 여기서 유의할 점은 왠만하면 경로를 바꾸지 않는 것을 권장한다.

또한, 여러 계정을 등록할 경우, 같은 경로에 같은 파일 이름이 등록되면 안되므로 -f 옵션 사용 시 식별할 수 있는 파일 이름을 지정해주는 것이 좋다.

 

경로와 파일 이름을 입력한 후에는 passphrase가 나오는데 이때 엔터를 치고 넘어간다.

이 단계에서 암호를 입력하면 SSH-Key를 사용할 때마다 암호를 입력해줘야 한다.(보안 강화+++)

 

생성이 완료되면 ls 명령어로 /.ssh 폴더 안에 방금 생성한 SSH Key가 잘 들어가 있는지 확인해준다. .pub확장자의 공개키와 확장자가 명시되지 않은 비공개 키가 한쌍씩 생성된 것이 확인되었다면 키 생성이 성공한 것이다.

 

 

2. SSH config 파일 생성하기

~/.ssh/config 파일이 없다면 빈파일 생성하고 아래와 같이 작성한다.

# 계정 1
# ----------------
Host ${임의의 닉네임1} // 후에 ssh 를 통해 레포지토리를 내려받는 경우 등에 사용 된다.
HostName ${해당 계정의 도메인} // bitbucket.org or github.com 등이 올 수 있다
User git
IdentityFile ${비밀키 경로} // ~/.ssh/id_rsa_이름

# 계정 2
# ----------------
Host ${임의의 닉네임2} // 후에 ssh 를 통해 레포지토리를 내려받는 경우 등에 사용 된다.
HostName ${해당 계정의 도메인} // bitbucket.org or github.com 등이 올 수 있다.
User git
IdentityFile ${비밀키 경로} // ~/.ssh/id_rsa_이름

** User를 user.name으로 설정하라는 글도 봤지만 나는 git으로 설정했다. 접속이 잘 됐다.

https://velog.io/@mini_y/Git-%ED%95%98%EB%82%98%EC%9D%98-local%EC%97%90%EC%84%9C-%EB%91%90%EA%B0%9C%EC%9D%98-github%EA%B3%84%EC%A0%95-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

 

3. github이나 Bitbucket에 ssh 키를 등록한다.

cat ~/.ssh/id_rsa_account1.pub

위의 명령어를 실행하면 id_rsa_account1의 공개키 값이 출력된다. 해당 내용을 모두 복사한 후 github.com 또는 bitbucket.org에서 personal setting(메뉴명이 이게 아닐 수도 있다. ssh 어쩌고를 찾아보자)을 찾아 저장한다.

ssh -T [HostName]

위 명령어를 통해 SSH 등록 여부를 확인할 수 있다.

 

4. SSH-agent 설정

*** config 파일을 작성했다면 아래의 명령어로 계정에 접속할 수 있다.    

ssh [HostName]

또한 등록해두면 해당 주소의 ssh를 사용할 때 해당 키를 참조하게 된다.

git clone git@[HostName]:[user.name]/[repositoryName].git

// 만약 git clone git@gitbub.com:test/test.git이었다면
// git clone git@github.com-test:test/test.git으로 바꿔서 입력

이미 로컬에 복사본이 있는 경우, 원본을 업데이트 해야한다.

git remote set-url origin git@github.com-test:test/test.git

이후 로컬의 git 레포지토리로 이동한 후 user.name과 user.email을 설정한다. 사실 이 부분은 설정하지 않아도 상관없는 것으로 보이는데, ssh 설정을 하고 난 후에 당최 내 계정을 내가 확인할 길이 없어서 사용했다.

 

SSH-agnet로 계정을 설정해두면 사용하는게 더 편리할 수 있다.

eval $(ssh-agent -s)  => ssh-agent background실행
ssh-add ~/.ssh/id_rsa => ssh 개인키 추가
ssh-add -l            => ssh 추가 조회
ssh -T git@"config파일의 Host"    => ssh 접속 테스트

 

여기까지만 해도 ssh를 설정해서 잘 사용할 수 있다. 좀 더 세세한 설정을 추가하고자 한다면 남은 스텝을 따라가보시길 바란다.

 


 

5. gitconfig 수정

이 부분은 나도 사실 아직 안해봤다. 근데 이랬던 적이 있어서 후에 추가하기 위해 기록을 남긴다.

잘 설정된 SSH Key로 pull이나 push는 잘 되고 있지만 커밋 기록을 봤더니 전혀 다른 계정으로 작업물을 올려놨던 적이 있다.

 

여러 SSH Key를 쓰는 경우, github이 어떤 계정으로 push를 하는지 구분할 수 없기 때문에 계정 전환이 필요하다. 그때 그때 config의 user.name이나 user.email을 수정하는 방법도 있지만 .gitconfig에서 설정해두면 계정 전환이 더 용이하다.

vim ~/.gitconfig

위의 명령어를 실행하여 파일을 작성하자.

# This is Git's per-user configuration file.
[user]
	name = [user.name]     
	email = [user.email]
# work
[includeIf "/Users/경로"]     
	path = .gitconfig-work

[includeIf "파일경로"] 는 해당 파일경로 있는 것들은 .gitconfig-work path설정하고 해당 디렉토리에 있는 파일들은 회사계정으로 git push, pull되게끔 설정

.gitconfig-work 파일 작성

[user]
	email = 회사깃헙계정메일주소
	name = 이름
[github]
user = 유저명

 

이렇게 미리 설정해 두면 의도치 않게 다른 계정으로 업로드 할 일이 없어진다고 한다.

 

 

SSH에 대한 내용을 이렇게 정리를 했으면서도 참 아직도 어질어질하다.

그래도 이렇게 기록해놨으니 다음엔 시간 낭비는 안하겠지.

설정해 뒀으니까 이제 ssh hostname만 쓰면 되겠지... ㅜㅜ 힘들었다. SSH

 

Ref

https://seunghee63.github.io/multi-account/

https://blog.developer.atlassian.com/different-ssh-keys-multiple-bitbucket-accounts/

https://usingu.co.kr/frontend/git/%ED%95%9C-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%97%90%EC%84%9C-github-%EA%B3%84%EC%A0%95-%EC%97%AC%EB%9F%AC%EA%B0%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0/

https://dryadsoft.tistory.com/18