SSH 키로 커밋 및 태그 서명
GitLab v19.2- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated SSH 키로 커밋 또는 태그에 서명하면, GitLab은 GitLab 계정에 연결된 SSH 공개 키를 사용하여 서명을 암호화 방식으로 검증합니다.
SSH 키로 커밋 및 태그 서명#
-
Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
SSH 키로 커밋 또는 태그에 서명하면, GitLab은 GitLab 계정에 연결된 SSH 공개 키를 사용하여 서명을 암호화 방식으로 검증합니다. 검증에 성공하면 GitLab은 커밋 또는 태그에 Verified 라벨을 표시합니다.
GitLab이 커밋을 검증된 것으로 인정하려면 다음 조건을 충족해야 합니다:
-
커밋 서명에 사용된 SSH 키를 GitLab 계정에 추가할 때 사용 유형을 Authentication & Signing 또는 Signing으로 설정해야 합니다.
-
Git 구성의 커미터 이메일 주소가 GitLab 계정에 연결된 인증된 이메일 주소와 일치해야 합니다.
서명이 유효하더라도 커미터 이메일이 계정의 인증된 이메일과 일치하지 않으면 커밋은 Unverified로 표시됩니다.
사용 유형이 Authentication & Signing인 경우, GitLab에 대한 git+ssh 인증과 커밋 서명에 동일한 SSH 키를 사용할 수 있습니다.
이는 GitLab 계정에 SSH 키 추가 페이지에서 확인할 수 있습니다.
GitLab 계정에 연결된 SSH 키 관리에 대한 자세한 내용은 SSH 키를 사용하여 GitLab과 통신하기를 참조하세요.
SSH 키로 커밋 및 태그를 서명하도록 Git 구성#
SSH 키를 생성하고 GitLab 계정에 추가한 후, Git을 해당 키를 사용하도록 구성합니다.
사전 요구 사항:
Git 2.34.0 이상.
OpenSSH 8.1 이상.
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 키를 연결합니다.
이 파일 구성에 대한 도움말은 로컬에서 커밋 검증을 참조하세요.
태그 서명 및 검증#
History
-
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로 표시됩니다.