Git 리모트 접근/커밋 사이닝 SSH 키를 레포지토리 경로에 따라 자동 전환하기 (1Password, includeIf)
살짝 시간을 들여서 한번 설정해두면 은근 많은 시간을 절약할 수 있음에도 놓치고 사는 것들이 있다. 예를 들면, 쉘 설정이나 IDE 스니펫 같은 것들…
Git 리모트에 접근하기 위해 여러 다른 계정을 사용해야 하는 환경에서 프로젝트 별로 1Password가 딱 맞는 키를 먼저 꺼내줬으면 해서 아래 셋팅을 해 두었다.
목표
- Git 리모트에 접근하기 위해 SSH를 사용한다
- Git 커밋 사이닝에 SSH 키를 사용한다
- 모든 SSH 인증은 1Password를 거친다
- 레포지토리가 특정 디렉토리에 속해있는지 여부로 사용할 SSH 키를 자동 전환한다
- 사실 같은 SSH 키를 공유해도 되지만, 하나의 비밀번호를 여러 웹 서비스에 사용하는 것과 마찬가지여서 별도의 키를 사용하는 게 낫다 생각
설정
0. SSH 키 생성 및 등록
여러 계정을 사용하는 이유는 사람마다 다르겠지만 편의상 개인용/업무용 계정이 있다고 가정하자.
1Password에서 개인용/업무용 계정에 사용할 SSH 키를 생성하고 Git 리모트 제공 서비스(GitHub 등)에 등록한다.
1. 공개 키 저장
리모트 접근에 사용하는 공개 키를 어딘가에 저장한다. 일반적으로 ~/.ssh/*.pub
리모트 접근용 키와 커밋 사인용 키를 별도로 만들었다면 여기에서 파일로 저장하는 키는 리모트 접근용 공개 키다.
1Password에 등록된 SSH 키는 바로 파일로 내보낼 수 있다.

2. SSH 설정
1Password SSH Agent 를 활성화한다.
SSH config에 아래 설정을 직접 추가해도 되고, 1Password 앱 설정에서 GUI로도 설정할 수 있다. (설정 - 개발자 - SSH 에이전트)
# ~/.ssh/config
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
# 기타 설정 ...
모든 SSH 연결에서 1Password SSH Agent가 먼저 개입하게 된다.

여기까지만 해두더라도 별도 설정 없이 인증 시도 창(위 스크린샷)이 떴을 때 원하는 키가 나올 때까지 거부 버튼/esc를 눌러서 인증할 수 있다.
3. Git 설정
# ~/.gitconfig
[user]
name = ...
email = ...@users.noreply.github.com
signingkey = ssh-ed25519 ... # 개인 계정 커밋 사이닝 공개 키. 1번에서 했던 것처럼 파일로 저장해서 경로를 지정해도 된다
[core]
sshCommand = ssh -i ~/.ssh/personal-key.pub # 개인 계정 리모트 접근 공개 키 경로
[includeIf "gitdir:~/Projects/_work/"] # trailing slash가 꼭 필요하다
path = ~/.gitconfig-work # ~/Projects/_work/ 경로에 속한 레포지토리에서는 이 설정을 사용하게 된다
[commit]
gpgsign = true
[gpg]
format = ssh
[gpg "ssh"]
# 커밋 사이닝이 1Password를 거치도록 설정. GUI에서 해도 된다
# (SSH 키 상세 보기에서 더보기 아이콘 - 커밋 서명 구성...)
program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
# 기타 설정 ...
-i 옵션에 공개 키(.pub)를 지정하면 SSH는 해당 공개 키를 인증 후보로 사용하고 1Password SSH Agent가 이미 보유 중인 키 중 일치하는 개인 키가 있으면 그 키로 서명을 수행한다.
4. 업무용 계정 설정
# ~/.gitconfig-work
[user]
name = ...
email = ...@example.com
signingkey = ssh-ed25519 ... # 업무용 계정 커밋 사이닝 공개 키. 1번에서 했던 것처럼 파일로 저장해서 경로를 지정해도 된다
[core]
sshCommand = ssh -i ~/.ssh/work-key.pub # 업무용 계정 리모트 접근 공개 키 경로
# 기타 설정 ...
~/Projects/_work에 속한 레포지토리에서는 ~/.gitconfig의 gpg, commit 설정과 ~/.gitconfig-work의 user, core 설정이 적용된다.
작동 방식
~/Projects/_work/work-repo/에서 git 명령 실행- Git이
includeIf조건 확인 →~/.gitconfig-work로드 - 리모트 접근 (push/pull):
sshCommand에 지정된 업무용 키로 1Password SSH Agent가 인증 - 커밋 사이닝:
signingkey에 지정된 업무용 키로 1Passwordop-ssh-sign이 서명
SSH Host/Alias 별로 사용할 키를 지정하는 방법도 있지만, 이 방법은 Git 리모트 URL을 바꿀 필요가 없고, 프로젝트에서 사용하는 계정이 바뀌더라도 프로젝트 경로만 바꾸면 돼서 편리하다.
확인
# ~/Projects/_work/work-repo/ 에서
git config user.email # 업무용 이메일 출력
# ~/Projects/personal-repo/ 에서
git config user.email # 개인용 이메일 출력