Github 다중 계정 SSH키 등록

환경

프로젝트 경로 : Z:\project\test\
디렉토리 구조
Z:\project\test\
├── backup\
├── .git\
├── .ssh\ 
└── doc\
github 주소는 nuleongdung.github.io
SSH키를 프로젝트 폴더 하위 Z:\project\test\.ssh
github 아이디 : nuleongdung
github 이메일 : nuleongdung@gmail.com

 

SSH 서비스 상태 확인

sc query sshd

이 명령어는 Windows 서비스 목록에서 sshd 서비스의 상태를 확인합니다.

  • RUNNING 상태이면 SSH 서버가 실행 중입니다.
  • STOPPED 상태이면 SSH 서버가 중지되어 있습니다.

netstat으로 SSH 포트 확인

netstat -an | grep ":22"

LISTEN 상태의 줄이 나타나면 SSH 서버가 실행 중입니다.

 

PowerShell을 이용한 SSH 상태 확인 (Git Bash에서도 실행 가능)

powershell Get-Service -Name sshd

SSH 서비스의 상태를 출력합니다.

 

SSH 서버 실행하기 (서비스가 중지된 경우)

net start sshd

관리자 권한으로 실행 합니다

 

SSH 서버 자동 실행 설정

sc config sshd start=auto

 

로컬 프로젝트 폴더에서 git init 실행 및 설정

cd Z:\project\test\
git init
git config --local user.name "nuleongdung"
git config --local user.email "nuleongdung@gmail.com"
git config --local core.sshCommand "ssh -i Z:/project/test/.ssh/id_rsa"

- Z:\project\test\ 프로젝트 폴더 안에 ,git 폴더가 생성 되었을 겁니다

- SSH 키 경로 설정하여 해당 프로젝트에서 특정 키 사용


SSH 키 생성

1. Git Bash에서 실행 (권장)

mkdir -p Z:\project\test\.ssh
ssh-keygen -t rsa -b 4096 -C "nuleongdung@gmail.com" -f Z:/project/test/.ssh/id_rsa -N ''

-N '' → 작은따옴표('') 사용 (PowerShell과의 호환성 문제 방지)

 

2. PowerShell에서 실행

mkdir -p Z:\project\test\.ssh
ssh-keygen -t rsa -b 4096 -C "nuleongdung@gmail.com" -f Z:\project\test\.ssh\id_rsa -N "$null"
  • C 옵션에는 GitHub 계정 이메일 입력
  • -f 옵션으로 해당 프로젝트의 .ssh 폴더에 키 저장

PowerShell에서는 빈 문자열을 ""로 감싸면 오류가 발생할 수 있으므로, 다음과 같이 실행합니다.
-N "$null" → PowerShell에서 빈 패스워드를 올바르게 처리

 

3. 비밀번호 입력 없이 진행하는 방법

mkdir -p Z:\project\test\.ssh
ssh-keygen -t rsa -b 4096 -C "nuleongdung@gmail.com" -f Z:/project/test/.ssh/id_rsa

만약 위 방법이 모두 오류가 난다면, -N 옵션을 빼고 실행한 후 직접 엔터를 눌러 빈 비밀번호를 입력할 수도 있습니다.
실행 후 비밀번호 입력 요청 시 그냥 Enter를 두 번 입력하면 빈 패스워드로 생성됨.


SSH 에이전트에 키 추가

eval $(ssh-agent -s)
ssh-add Z:/project/test/.ssh/id_rsa

GitHub에 공개 키 추가

cat Z:/project/test/.ssh/id_rsa.pub

출력된 키를 복사하고, GitHub의 Settings > SSH and GPG keys 에 추가

SSH 연결 테스트

ssh -T git@github.com

 

성공 메세지

"Hi nuleongdung! You've successfully authenticated, but GitHub does not provide shell access."


Git 설정 및 원격 저장소 연결

 

1. 원격 저장소 추가 및 확인

git remote add origin git@github.com:nuleongdung/nuleongdung.github.io.git
git remote -v

 

출력 예시:

origin  git@github.com:nuleongdung/nuleongdung.github.io.git (fetch)
origin  git@github.com:nuleongdung/nuleongdung.github.io.git (push)

 

2 .gitignore 설정 (doc 폴더 제외)

echo "doc/" >> .gitignore

 

3. 커밋 및 푸시

git add html/
git commit -m "Initial commit for html folder"
git push -u origin main

VSCode의 code-workspace 설정

 

code-workspace 파일 수정

{
  "folders": [
    {
      "path": "Z:/project/test"
    }
  ],
  "settings": {
    "git.enableCommitSigning": true,
    "git.sshCommand": "ssh -i Z:/project/test/.ssh/id_rsa"
  }
}
  • git.sshCommand를 프로젝트별로 다르게 설정

이제 VSCode에서 자동으로 해당 프로젝트에 맞는 SSH 키를 사용하여 GitHub에 연결됨.


추가적인 SSH 키 설정 (다른 프로젝트도 별도 설정하려면)

ssh-add -l   # 현재 추가된 키 확인
ssh-add -D   # 기존 추가된 키 제거
ssh-add Z:\0-project\git\다른프로젝트\.ssh\id_rsa

VSCode의 code-workspace에서 git.sshCommand를 프로젝트마다 다르게 설정하면 자동 적용

 


Git이 커밋을 할 때 GPG 서명을 요구하지만 계정의 비밀키(Secret Key)가 서명이 실패시
[ error: gpg failed to sign the data ]

 

프로젝트별 GPG 키 저장 위치 확인

gpg --homedir "Z:\0-project\git\nuleongdung.github.io\.ssh" --list-secret-keys --keyid-format LONG

 

 

 

프로젝트별 GPG 키 생성

gpg --quick-generate-key "nuleongdung <nuleongdung@gmail.com>" rsa4096 sign 1y

 

옵션별 설명

1️⃣  "nuleongdung <nuleongdung@gmail.com>"

  • 키의 사용자 이름과 이메일을 지정
  • Git 커밋 서명을 할 때 이 이름과 이메일이 사용됨
  • 이메일은 GitHub에 등록해야 함

2️⃣ rsa4096

  • RSA 알고리즘을 사용하여 4096비트 길이의 키를 생성
  • RSA는 가장 널리 사용되는 암호화 알고리즘 중 하나
  • 4096비트는 보안성이 높음

3️⃣ sign

  • 서명(Signing) 용도로만 사용할 키를 생성
  • Git 서명 및 인증 목적으로 사용됨
  • 다른 용도(예: 암호화)로 사용하려면 cert 또는 encrypt 추가 가능

4️⃣ 1y

  • 키의 유효기간을 1년(1 year)으로 설정
  • 1년이 지나면 키를 갱신해야 함
  • 영구적으로 사용하려면 0을 입력하면 됨 (권장하지 않음)

 

새로운 GPG 키 ID 확인

gpg --list-secret-keys --keyid-format LONG
출력예시
sec   rsa4096/XXXXXXXXXXXXXXXX 2023-05-17 [SC]
      키 정보...
uid  [ultimate] nuleongdung <nuleongdung@gmail.com>
 
프로젝트 폴더에서 Git 로컬 GPG 키 설정
cd Z:\project\test
git config --local user.signingkey XXXXXXXXXXXXXXXX
git config --local commit.gpgsign true

XXXXXXXXXXXXXX 부분을 위에서 찾은 GPG 키 ID로 변경

 

GitHub에 새로운 GPG 공개키 추가

gpg --armor --export XXXXXXXXXXXXXXXX > ./my_public_key.asc

 

출력된 키를 GitHub → Settings → SSH and GPG keys → GPG keys에 추가

 

테스트

echo "test" > test.txt
git add test.txt
git commit -S -m "테스트 GPG 서명"

✔️ 정상적으로 GPG 서명이 적용되면 성공

✅ .ssh 폴더를 GPG 홈 디렉토리로 사용하면 문제 발생 가능성이 높음
✅ 기본 .gnupg 폴더를 사용하고, 프로젝트마다 GPG 키를 따로 생성해서 git config --local로 지정하는 것이 가장 안정적인 방법입니다