SSH 키로 커밋 및 태그 서명
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
SSH 키로 커밋이나 태그에 서명하면 GitLab은 GitLab 계정에 연결된 SSH 공개 키로 서명을 암호학적으로 검증합니다. GitLab 이 커밋을 검증된 것으로 인정하려면 다음 조건을 충족해야 합니다. 서명은 유효하지만 커미터 이메일이 계정의 인증된 이메일과 일치하지 않으면 해당 커밋은 Unverified로 표시됩니다.
SSH 키로 커밋이나 태그에 서명하면 GitLab은 GitLab 계정에 연결된 SSH 공개 키로 서명을 암호학적으로 검증합니다. 검증에 성공하면 GitLab 이 해당 커밋이나 태그에 Verified 레이블을 표시합니다.
GitLab 이 커밋을 검증된 것으로 인정하려면 다음 조건을 충족해야 합니다.
- 커밋 서명에 사용한 SSH 키를 Authentication & Signing 또는 Signing 사용 유형으로 GitLab 계정에 추가해야 합니다.
- Git 구성의 커미터 이메일 주소가 GitLab 계정에 연결된 인증된 이메일 주소와 일치해야 합니다.
서명은 유효하지만 커미터 이메일이 계정의 인증된 이메일과 일치하지 않으면 해당 커밋은 Unverified로 표시됩니다.
사용 유형이 Authentication & Signing 이라면 동일한 SSH 키를 GitLab에 대한 git+ssh
인증과 커밋 서명에 함께 사용할 수 있습니다.
사용 유형은 GitLab 계정에 SSH 키 추가 페이지에서 확인할 수 있습니다.
GitLab 계정에 연결된 SSH 키 관리에 대한 자세한 내용은 SSH 키로 GitLab과 통신을 참고합니다.
SSH 키로 커밋 및 태그를 서명하도록 Git 구성#
SSH 키를 생성하고 GitLab 계정에 추가한 뒤에는 해당 키를 사용하도록 Git을 구성합니다.
사전 요구 사항:
-
Git 2.34.0 이상.
-
OpenSSH 8.1 이상.
[!note] OpenSSH 8.7은 서명 기능에 결함이 있습니다. OpenSSH 8.7을 사용 중이라면 OpenSSH 8.8로 업그레이드합니다.
-
Usage type 이
Authentication & Signing또는Signing인 SSH 키. 다음 SSH 키 유형을 지원합니다.- ED25519
- ED25519_SK
- RSA
- ECDSA
- ECDSA_SK
키를 사용하도록 Git을 구성하려면 다음 단계를 따릅니다.
-
커밋 서명에 SSH를 사용하도록 Git을 구성합니다.
git config --global gpg.format ssh -
서명 키로 사용할 SSH 공개 키를 지정하고 파일 이름(
~/.ssh/examplekey.pub)을 키가 있는 위치로 바꿉니다. 키를 생성한 방식에 따라 파일 이름이 다를 수 있습니다.git config --global user.signingkey ~/.ssh/examplekey.pub
SSH 키로 커밋 서명#
사전 요구 사항:
- SSH 키를 생성했습니다.
- GitLab 계정에 키를 추가했습니다.
- SSH 키로 커밋에 서명하도록 Git을 구성했습니다.
- Git의
user.email이 GitLab 계정에 연결된 인증된 이메일 주소와 일치합니다.
커밋에 서명하려면 다음 단계를 따릅니다.
-
커밋에 서명할 때
-S플래그를 사용합니다.git commit -S -m "My commit msg" -
선택 사항. 커밋할 때마다
-S플래그를 입력하지 않으려면 커밋에 자동으로 서명하도록 Git에 지정합니다.git config --global commit.gpgsign true -
SSH 키가 보호되어 있으면 Git 이 패스프레이즈 입력을 요청합니다.
-
GitLab에 푸시합니다.
-
커밋이 검증되었는지 확인합니다. 서명 검증은
allowed_signers파일을 사용해 이메일과 SSH 키를 연결합니다. 이 파일 구성 방법은 로컬에서 커밋 검증을 참고합니다.
태그 서명 및 검증#
히스토리
- GitLab 18.3에서
render_ssh_signed_tags_verification_status라는 기능 플래그와 함께 도입되었습니다. 기본적으로 비활성화되어 있습니다. - GitLab 18.11에서 GitLab.com, GitLab Self-Managed, GitLab Dedicated에 활성화되었습니다.
- GitLab 19.1에서 일반 제공되었습니다. 기능 플래그
render_ssh_signed_tags_verification_status가 제거되었습니다.
SSH 키로 커밋 및 태그에 서명하도록 Git을 구성한 뒤에는 태그에 서명할 수 있습니다.
-
Git 태그를 생성할 때
-s플래그를 추가합니다.git tag -s v1.1.1 -m "My signed tag" -
GitLab에 푸시한 다음 이 명령으로 태그에 서명되었는지 확인합니다.
git tag --verify v1.1.1 -
선택 사항.
-s플래그 없이 태그에 자동으로 서명하려면 다음을 실행합니다.git config --global tag.gpgsign true
커밋 검증#
서명된 모든 유형의 커밋은 GitLab UI 에서 검증할 수 있습니다. SSH 키로 서명한 커밋은 로컬에서도 검증할 수 있습니다.
로컬에서 커밋 검증#
로컬에서 커밋을 검증하려면 Git 이 SSH 공개 키를 사용자와 연결할 수 있도록
allowed signers 파일을
생성합니다.
이 예시에서는 ~/.ssh/allowed_signers를 사용하지만 다른 경로를 지정해도 됩니다.
이후 단계에서도 같은 경로를 사용합니다.
-
SSH 디렉터리를 생성합니다.
mkdir -p ~/.ssh -
allowed signers 파일을 생성합니다.
touch ~/.ssh/allowed_signers -
해당 파일을 사용하도록 Git을 구성합니다.
git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers" -
allowed signers 파일에 항목을 추가합니다.
를 키 이름으로 바꿉니다. 1단계에서 다른 경로를 선택했다면~/.ssh/allowed_signers를 그 경로로 바꿉니다.# Declaring the `git` namespace helps prevent cross-protocol attacks. echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/.pub)" >> ~/.ssh/allowed_signers생성된 항목에는 이메일 주소, 키 유형, 키 내용이 포함됩니다.
example@gitlab.com namespaces="git" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAmaTS47vRmsKyLyK1jlIFJn/i8wdGQ3J49LYyIYJ2hv -
검증하려는 사용자마다 이 단계를 반복합니다. 다른 기여자와 협업한다면 이 파일을 Git 리포지터리에 커밋하는 방안을 고려합니다.
-
git log --show-signature로 커밋의 서명 상태를 확인합니다.$ git log --show-signature commit e2406b6cd8ebe146835ceab67ff4a5a116e09154 (HEAD -> main, origin/main, origin/HEAD) Good "git" signature for johndoe@example.com with ED25519 key SHA256:Ar44iySGgxic+U6Dph4Z9Rp+KDaix5SFGFawovZLAcc Author: John Doe <johndoe@example.com> Date: Tue Nov 29 06:54:15 2022 -0600 SSH signed commit
삭제된 SSH 키로 서명된 커밋#
커밋 서명에 사용한 SSH 키를 취소하거나 삭제할 수 있습니다. 자세한 내용은 SSH 키 제거를 참고합니다.
SSH 키를 제거하면 그 키로 서명한 커밋에 다음과 같은 영향이 있습니다.
- SSH 키를 취소하면 이전 커밋이 Unverified로 표시됩니다. 새 SSH 키를 추가하기 전까지는 새 커밋도 Unverified로 표시됩니다.
- SSH 키를 삭제해도 이전 커밋에는 영향이 없습니다. 새 SSH 키를 추가하기 전까지는 새 커밋이 Unverified로 표시됩니다.