GPG로 커밋 서명하기
Offering: GitLab.com, Self-managed, GitLab Dedicated
GitLab 리포지토리에서 만든 커밋에 GPG (GNU Privacy Guard) 키로 서명할 수 있습니다.
GitLab에서 커밋을 검증된 것으로 간주하려면:
-
커밋터는 GPG 공개/비공개 키 쌍을 가지고 있어야 합니다.
-
커밋터의 공개 키는 그들의 GitLab 계정에 업로드되어야 합니다.
-
GPG 공개 키의 이메일 주소 중 하나는 커밋터가 GitLab에서 사용하는 검증된 이메일 주소와 일치해야 합니다. 이 주소를 비공개로 유지하려면, 프로필에서 GitLab이 제공하는 자동 생성된 비공개 커밋 이메일 주소를 사용하세요.
-
커밋터의 이메일 주소는 GPG 키의 검증된 이메일 주소와 일치해야 합니다.
GitLab은 GPG 서명을 검증하기 위해 자체 키링을 사용합니다. 어떤 공개 키 서버에도 접근하지 않습니다.
GPG로 검증된 태그는 지원되지 않습니다.
GPG에 대한 자세한 내용은 관련 주제 목록을 참조하세요.
사용자의 공개 GPG 키 보기
사용자의 공개 GPG 키를 보려면 다음 방법 중 하나를 사용할 수 있습니다:
-
https://gitlab.example.com/<USERNAME>.gpg
로 이동하세요. 사용자가 GPG 키를 구성했다면 GitLab은 GPG 키를 표시하며, 구성되지 않은 사용자의 경우 빈 페이지가 표시됩니다. -
사용자의 프로필로 이동하세요 (예:
https://gitlab.example.com/<USERNAME>
). 사용자 프로필의 오른쪽 상단 모서리에서 공개 GPG 키 보기 ()를 선택하세요. 이 버튼은 사용자가 키를 구성한 경우에만 표시됩니다.
커밋 서명 구성하기
커밋에 서명하려면 로컬 컴퓨터와 GitLab 계정을 모두 구성해야 합니다:
GPG 키 만들기
아직 GPG 키가 없으면 만들어야 합니다:
-
운영 체제에 맞는 GPG 설치하기.
운영 체제에
gpg2
가 설치되어 있다면, 이 페이지의 명령에서gpg
를gpg2
로 교체하세요. -
키 쌍을 생성하려면 사용 중인
gpg
버전에 맞는 명령어를 실행하세요:# 이 명령은 기본 GPG 버전, Windows의 Gpg4win 및 대부분의 macOS 버전에서 사용합니다: gpg --gen-key # GPG 2.1.17 이상의 버전에서는 이 명령을 사용하세요: gpg --full-gen-key
-
키에 사용할 알고리즘을 선택하거나 Enter를 눌러 기본 옵션인
RSA and RSA
를 선택하세요. -
비트 단위의 키 길이를 선택하세요. GitLab은 4096비트 키를 권장합니다.
-
키의 유효 기간을 지정하세요. 이 값은 주관적이며 기본 값은 만료 없음입니다.
-
답변을 확인하려면
y
를 입력하세요. -
이름을 입력하세요.
-
이메일 주소를 입력하세요. GitLab 계정의 검증된 이메일 주소와 일치해야 합니다.
-
선택 사항. 이름 뒤에 괄호로 표시할 주석을 입력하세요.
-
GPG는 지금까지 입력한 정보를 표시합니다. 정보를 편집하거나 O (또는
Okay
)를 눌러 계속하세요. -
강력한 비밀번호를 입력한 후 다시 입력하여 확인하세요.
-
개인 GPG 키를 나열하려면 이 명령을 실행하며, 키를 생성할 때 사용한 이메일 주소로
<EMAIL>
을 대체하세요:gpg --list-secret-keys --keyid-format LONG <EMAIL>
-
출력에서
sec
줄을 찾아 GPG 키 ID를 복사하세요. 이 ID는/
문자 다음에서 시작합니다. 이 예에서 키 ID는30F2B65B9246B6CA
입니다:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
-
연결된 공개 키를 표시하려면 이 명령을 실행하며, 이전 단계의 GPG 키 ID로
<ID>
를 대체하세요:gpg --armor --export <ID>
-
공개 키를 복사하세요.
BEGIN PGP PUBLIC KEY BLOCK
와END PGP PUBLIC KEY BLOCK
줄을 포함해야 합니다. 이 키는 다음 단계에서 필요합니다.
계정에 GPG 키 추가하기
사용자 설정에 GPG 키를 추가하려면:
- GitLab에 로그인합니다.
- 왼쪽 사이드바에서 아바타를 선택합니다.
- 프로필 편집을 선택합니다.
- GPG Keys ()를 선택합니다.
- 새 키 추가를 선택합니다.
- 키에 공개 키를 붙여넣습니다.
-
키를 계정에 추가하려면 키 추가를 선택합니다. GitLab은 키의 지문, 이메일 주소 및 생성 날짜를 표시합니다:
키를 추가한 후에는 키를 편집할 수 없습니다. 대신, 문제가 있는 키를 제거하고 다시 추가하십시오.
GPG 키를 Git에 연결하기
GPG 키를 생성한 후 계정에 추가한 후, Git이 이 키를 사용하도록 설정해야 합니다:
-
다음 명령을 실행하여 방금 생성한 개인 GPG 키를 나열합니다.
<EMAIL>
을 키의 이메일 주소로 바꿉니다:gpg --list-secret-keys --keyid-format LONG <EMAIL>
-
sec
로 시작하는 GPG 개인 키 ID를 복사합니다. 이 예에서 개인 키 ID는30F2B65B9246B6CA
입니다:sec rsa4096/30F2B65B9246B6CA 2017-08-18 [SC] D5E4F29F3275DC0CDA8FFC8730F2B65B9246B6CA uid [ultimate] Mr. Robot <your_email> ssb rsa4096/B7ABC0813E4028C0 2017-08-18 [E]
-
다음 명령을 실행하여 Git이 키로 커밋을 서명하도록 구성합니다.
<KEY ID>
를 GPG 키 ID로 바꿉니다:git config --global user.signingkey <KEY ID>
Git 커밋 서명하기
공개 키를 계정에 추가한 후, 개별 커밋을 수동으로 서명할 수 있으며, Git을 구성하여 서명된 커밋을 기본값으로 설정할 수 있습니다:
-
개별 Git 커밋을 수동으로 서명하기:
-
서명하려는 커밋에
-S
플래그를 추가합니다:git commit -S -m "내 커밋 메시지"
-
요청 시 GPG 키의 암호를 입력합니다.
-
GitLab에 푸시하고 커밋이 검증되었는지 확인합니다.
-
-
기본적으로 모든 Git 커밋을 서명하려면 다음 명령을 실행합니다:
git config --global commit.gpgsign true
서명 키 조건부 설정
별도의 용도로 서명 키를 유지하는 경우,
예를 들어 작업 및 개인 용도, .gitconfig
파일의 IncludeIf
문을 사용하여
어떤 키로 커밋을 서명할지 설정합니다.
사전 조건:
- Git 버전 2.13 이상이 필요합니다.
-
주
~/.gitconfig
파일과 동일한 디렉토리에서.gitconfig-gitlab
과 같은 두 번째 파일을 생성합니다. -
주
~/.gitconfig
파일에서 비GitLab 프로젝트의 작업에 대한 Git 설정을 추가합니다. -
주
~/.gitconfig
파일의 끝에 다음 정보를 추가합니다:# 이 파일의 내용은 GitLab.com URL에만 포함됩니다 [includeIf "hasconfig:remote.*.url:https://gitlab.com/**"] # 이 줄을 수정하여 대체 구성 파일을 가리킵니다 path = ~/.gitconfig-gitlab
-
대체
.gitconfig-gitlab
파일에서 GitLab 리포지토리에 커밋할 때 사용할 구성 재정의를 추가합니다. 주~/.gitconfig
파일의 모든 설정은 명시적으로 재정의하지 않는 한 유지됩니다. 이 예에서,# 대체 ~/.gitconfig-gitlab 파일 # 이러한 값은 'gitlab.com' 문자열과 일치하는 리포지토리에 사용되며, # ~/.gitconfig의 해당 값을 재정의합니다. [user] email = 당신@example.com signingkey = <KEY ID> [commit] gpgsign = true
GPG 키 취소
GPG 키가 손상된 경우 취소하십시오. 키를 취소하면 향후 및 과거 커밋 모두에 영향을 미칩니다:
- 이 키로 서명된 과거 커밋은 확인되지 않음으로 표시됩니다.
- 이 키로 서명된 향후 커밋도 확인되지 않음으로 표시됩니다.
GPG 키를 취소하려면:
-
왼쪽 사이드바에서 아바타를 선택합니다.
-
프로필 수정을 선택합니다.
-
GPG 키()를 선택합니다.
-
삭제하려는 GPG 키 옆의 취소를 선택합니다.
GPG 키 제거
GitLab 계정에서 GPG 키를 제거할 때:
- 이 키로 서명된 이전 커밋은 여전히 확인된 것으로 남습니다.
- 이 키를 사용하려는 향후 커밋(생성되었지만 아직 푸시되지 않은 모든 커밋 포함)은 확인되지 않음으로 표시됩니다.
계정에서 GPG 키를 제거하려면:
-
왼쪽 사이드바에서 아바타를 선택합니다.
-
프로필 수정을 선택합니다.
-
GPG 키()를 선택합니다.
-
삭제하려는 GPG 키 옆의 제거()를 선택합니다.
향후 및 과거 커밋 모두를 확인하지 않으려면,
관련 GPG 키를 취소하십시오 대신.
관련 주제
- 웹 UI에서 만든 커밋의 서명 설정
- GPG 리소스:
문제 해결
비밀 키를 사용할 수 없음
secret key not available
또는 gpg: signing failed: secret key not available
오류가 발생하면 gpg
대신 gpg2
를 사용해 보세요:
git config --global gpg.program gpg2
GPG 키가 비밀번호로 보호되어 있고 비밀번호 입력 프롬프트가 나타나지 않으면,
쉘의 rc
파일(보통 ~/.bashrc
또는 ~/.zshrc
)에 export GPG_TTY=$(tty)
를 추가하십시오.
GPG가 데이터를 서명하지 못했습니다
GPG 키가 비밀번호로 보호되어 있고 다음 오류가 발생하면:
error: gpg failed to sign the data
fatal: failed to write commit object
비밀번호 입력 프롬프트가 나타나지 않으면,
쉘의 rc
파일(보통 ~/.bashrc
또는 ~/.zshrc
)에 export GPG_TTY=$(tty)
를 추가하고 터미널을 재시작하십시오.