SSH 키로 커밋 및 태그 서명
Offering: 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인 경우 GitLab에 대한 git+ssh 인증과 커밋 서명 모두에 동일한 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에서 활성화됨.
이 기능의 가용성은 기능 플래그로 제어됩니다. 자세한 내용은 기록을 참조하세요.
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 공개 키를 사용자와 연결할 수 있는
허용된 서명자 파일을 만듭니다.
이 예시에서는 ~/.ssh/allowed_signers를 사용하지만 다른 경로를 지정할 수 있습니다.
다음 단계에서 동일한 경로를 사용합니다.
-
SSH 디렉토리를 만듭니다:
mkdir -p ~/.ssh -
허용된 서명자 파일을 만듭니다:
touch ~/.ssh/allowed_signers -
Git이 파일을 사용하도록 구성합니다:
git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers" -
허용된 서명자 파일에 항목을 추가합니다.
를 키 이름으로 교체합니다. 1단계에서 다른 경로를 선택한 경우~/.ssh/allowed_signers를 해당 경로로 교체합니다:# `git` 네임스페이스를 선언하면 교차 프로토콜 공격을 방지하는 데 도움이 됩니다. 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로 표시됩니다.
