SSH 키로 커밋 서명하기
Offering: GitLab.com, Self-managed, GitLab Dedicated
-
Introduced in GitLab 15.7 with a flag named
ssh_commit_signatures
. Enabled by default. -
Generally available in GitLab 15.8. Feature flag
ssh_commit_signatures
removed.
SSH 키로 커밋에 서명하면 GitLab은 귀하의 GitLab 계정과 연결된 SSH 공개 키를 사용하여 커밋 서명을 암호학적으로 검증합니다.
성공적으로 검증되면 GitLab은 커밋에 Verified 라벨을 표시합니다.
git+ssh
인증을 GitLab에 사용하고 커밋 서명을 할 때 동일한 SSH 키를 사용할 수 있습니다. 단, 사용 유형이 Authentication & Signing이어야 합니다. 이는 GitLab 계정에 SSH 키 추가하기 페이지에서 확인할 수 있습니다.
GitLab 계정과 연결된 SSH 키 관리에 대한 더 많은 정보는 GitLab과 통신하기 위해 SSH 키 사용하기를 참조하세요.
SSH 키로 커밋에 서명하도록 Git 구성하기
SSH 키를 생성한 후
GitLab 계정에 추가했거나
비밀번호 관리자를 사용하여 생성한 경우,
키를 사용하도록 Git을 구성합니다.
전제 조건:
- Git 2.34.0 이상.
-
OpenSSH 8.1 이상.
OpenSSH 8.7은 서명 기능에 문제가 있습니다. OpenSSH 8.7을 사용 중이라면 OpenSSH 8.8로 업그레이드하세요. - 사용 유형이 Authentication & Signing 또는 Signing인 SSH 키가 필요합니다.
SSH 키는 다음 유형 중 하나여야 합니다:
키를 사용하도록 Git을 구성하려면:
-
Git에 커밋 서명에 SSH 사용하도록 설정합니다:
git config --global gpg.format ssh
-
서명 키로 사용할 공개 SSH 키를 지정하고, 파일 이름(
~/.ssh/examplekey.pub
)을 키의 위치로 변경하세요. 파일 이름은 키를 생성하는 방법에 따라 다를 수 있습니다:git config --global user.signingkey ~/.ssh/examplekey.pub
SSH 키로 커밋 서명하기
전제 조건:
커밋에 서명하려면:
-
커밋에 서명할 때
-S
플래그를 사용합니다:git commit -S -m "내 커밋 메시지"
-
선택 사항입니다. 매번 커밋할 때
-S
플래그를 입력하고 싶지 않다면, Git에 커밋을 자동으로 서명하도록 설정하세요:git config --global commit.gpgsign true
- SSH 키가 보호되는 경우, Git은 비밀번호를 입력하라는 메시지를 표시합니다.
- GitLab에 푸시합니다.
- 커밋이 검증되었는지 확인하세요.
서명 검증은allowed_signers
파일을 사용하여 이메일과 SSH 키를 연결합니다. 이 파일을 구성하는 방법에 대한 도움은 로컬에서 커밋 검증하기를 읽어보세요.
커밋 검증
모든 유형의 서명된 커밋을 검증할 수 있습니다
GitLab UI에서. SSH 키로 서명된 커밋도 로컬에서 검증할 수 있습니다.
로컬에서 커밋 검증
로컬에서 커밋을 검증하려면, Git이 사용자를 SSH 공개 키와 연결할 수 있도록
허용된 서명자 파일을 만듭니다:
-
허용된 서명자 파일을 생성합니다:
touch allowed_signers
-
Git에서
allowed_signers
파일을 구성합니다:git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers"
-
허용된 서명자 파일에 항목을 추가합니다. 이 명령을 사용하여
이메일 주소와 공개 SSH 키를allowed_signers
파일에 추가합니다.<MY_KEY>
를
키 이름으로 바꾸고~/.ssh/allowed_signers
를 프로젝트의allowed_signers
파일 위치로 변경합니다:# 이 줄을 필요에 맞게 수정합니다. # `git` 네임스페이스를 선언하면 교차 프로토콜 공격을 방지하는 데 도움이 됩니다. echo "$(git config --get user.email) namespaces=\"git\" $(cat ~/.ssh/<MY_KEY>.pub)" >> ~/.ssh/allowed_signers
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 서명된 커밋
커밋 서명을 위한 SSH 키 무효화
- GitLab 15.9에서 도입됨.
SSH 키가 침해된 경우, 무효화합니다. 키를 무효화하면 미래와 과거 커밋 모두에
변경이 생깁니다:
- 이 키로 서명된 과거 커밋은 검증되지 않은 것으로 표시됩니다.
- 이 키로 서명된 미래 커밋은 검증되지 않은 것으로 표시됩니다.
SSH 키를 무효화하면 계정에서 제거됩니다.
오직 인증에만 사용되는 SSH 키에는 무효화 옵션이 없습니다.
SSH 키를 무효화하려면:
- 왼쪽 사이드바에서 아바타를 선택합니다.
- 프로필 편집을 선택합니다.
- 왼쪽 사이드바에서 SSH 키()를 선택합니다.
- 무효화하려는 SSH 키 옆에서 무효화를 선택합니다.
- 선택 사항: SSH 키 삭제.