본문 바로가기
관리자

Programming-[Base]/git

github ssh 방식, GPG key와 ssh key unverified 문제, .git config에 대한 이해

728x90
반응형

git 설정 방식 개념 - 계정 여러개에 대해 설정한 경우

구글링해서 계정 여러 개에 대해서 ssh 방식으로 key값을 등록하는 방법들을 찾을 수 있다. 나의 경우 아래처럼 설정했다.

 

1. ssh로 접속하는 정보는 ~/.ssh 디렉토리 내에 있다.

 

userA는 개인 계정, userB는 회사계정으로 설정했다. 

key를 만들고 github에 등록하는 방법은 쉽게 찾을 수 있다. 아래 글을 참고해도 좋다.

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/

 

ssh key 생성 명령어
$ ssh-keygen -t rsa -b 4096 -C "userA@example.com" -f "id_rsa_userA"

 

 

 

2. ssh agent 및 git config 개념

 

위에서 등록한 ssh-key를 등록하고 확인할려면 아래 명령어들을 참고하면 된다.

 

ssh agent

# 확인
$ eval "$(ssh-agent -s)"

# 추가
$ ssh-add ~/.ssh/id_rsa_userA
$ ssh-add ~/.ssh/id_rsa_userB

# 추가 확인
ssh-add -l

# 삭제 (모든 등록된 내용을 삭제하므로 약간 주의)
ssh-add -D

 

 

git config (global, local)

 

ref) ssh local, global config 개념

https://kotlinworld.com/302

 

global 설정은 ~/.gitconfig에 있다.

local 설정은 각 프로젝트 디렉토리의 .git/config에 있다.

 

나의 경우, global로는 gpg key가 설정되어있고, signingKey도 github에 등록된 gpg Key의 fingerprint 값이다.

 

local 설정을 확인해보면 아래처럼 되어있다.

 

 

git config 등록 관련 명령어

 

local 설정은 global 설정을 덮어쓴다. 왠만하면 local 설정만 건드리는게 좋다.

# local의 user.name에 값을 설정
$ git config user.name charlie

# 확인
$ cat .git/config

# global
$ git config --global user.name charlie-global

# 속성 삭제
# git config --unset user.name

 

 

 

해결하지 못한 문제에 대해 정리(git config ssh 방식, ssh key fingerprint)

 

위 내용에 따라 local의 git config에 user.name, user.email 속성을 넣어주면 해당 ID를 통해서 github에 verified로 commit이 올라간다. 참고로 가장 최근의 commit을 메시지만 바꾸는 것은 아래 명령어로 할 수 있다.

 

$ git commit --amend -m "메시지만 바꿀래요"

 

다만 이렇게 commit하면 gpg key를 사용해서 email, name값만 바꿔서 commit 되버린다.

 

 

그래서 강제로 ssh를 통해 commit 할려고, 여러 글들을 참고해서 local의 git config에 다음 속성들을 더해주었다.

ref.)

개념: https://kotlinworld.com/302

1password에서 알려주는 설정 방법: https://developer.1password.com/docs/ssh/git-commit-signing/

 

 

정확히 알지 못하고 속성값들을 등록해봤는데, ssh로 정상적으로 commit은 되는데 unverified로 표시되고, 이유를 정확히는 모르겠다. 시간이 없어서 일단 기록이라도 해둔다.

 

# ssh 방식으로 sign 하겠다고 선언하는 듯함
$ git config gpg.format ssh

# signingKey로 ssh key를 지정
$ git config user.signingKey ~/.ssh/id_rsa_userA

# ssh agent가 실행하는 명령어 지정??
$ git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_userA'

 

 

fingerprint가 달랐던 문제

위 명령어대로 config 설정값들을 설정하고 unverified 태그를 눌러서 ssh key의 fingerprint를 확인해보니, 내가 local에서 생성하고 github에 등록한 ssh key의 fingerprint 값과 다른것을 확인했다.

 

 

ssh key fingerprint 확인

$ ssh-keygen -lf /.ssh/{id_rsa로 시작하는 내가 생성한 key 파일.pub}

 

 

일치하도록 맨 위에서 배운 ssh-add 명령어를 통해 기존 ssh agent에 등록된 key값들을 삭제하고 다시 등록한 뒤, 다시 commit하면 commit의 fingerprint가 일치하는 것은 확인할 수 있었다. 다만 그렇게 하더라도 unverified로 남았다...

 

 

728x90
반응형