SSH 키로 커밋 서명하기
- GitLab 15.7에서 소개되었으며
ssh_commit_signatures
이라는 플래그로 제공됩니다. 기본적으로 활성화됩니다.- GitLab 15.8에서 일반적으로 사용 가능해졌으며 피처 플래그
ssh_commit_signatures
가 제거되었습니다.
SSH 키로 커밋에 서명할 때 GitLab은 GitLab 계정에 연결된 SSH 공개 키를 사용하여 커밋 서명을 암호화하고 확인합니다. 성공적으로 확인되면 GitLab에서 커밋에 확인됨(Verified) 레이블을 표시합니다.
git+ssh
인증을 위해 동일한 SSH 키를 사용하거나 인증 및 서명(Authentication & Signing)용도로 사용하는 동안 커밋 서명에 사용할 수 있습니다. SSH 키를 GitLab 계정에 SSH 키 추가하는 페이지에서 확인할 수 있습니다.
GitLab 계정과 관련된 SSH 키를 관리하는 자세한 정보는 GitLab과 통신하기 위해 SSH 키 사용을 참조하십시오.
Git을 구성하여 SSH 키로 커밋에 서명하기
SSH 키를 만들고 GitLab 계정에 추가하거나 암호 관리자를 사용하여 생성한 후 Git을 구성하여 해당 키를 사용하도록 설정하십시오.
사전 요구 사항:
- Git 2.34.0 이상.
-
OpenSSH 8.0 이상.
OpenSSH 8.7은 서명 기능이 손상되었습니다. OpenSSH 8.7을 사용 중인 경우 8.8로 업그레이드하십시오. - 인증 및 서명 또는 서명 용도의 SSH 키가 있어야 합니다. SSH 키는 다음 중 하나여야 합니다:
Git을 키 사용하도록 구성하려면:
-
Git을 커밋 서명을 위해 SSH 사용하도록 구성합니다:
git config --global gpg.format ssh
-
사용할 공개 SSH 키를 서명 키로 지정하고 파일 이름(
~/.ssh/examplekey.pub
)을 키 위치로 변경하십시오. 키를 생성하는 방식에 따라 파일 이름이 다를 수 있습니다:git config --global user.signingkey ~/.ssh/examplekey.pub
SSH 키로 커밋에 서명하기
사전 요구 사항:
- SSH 키를 생성했습니다.
- 해당 키를 GitLab 계정에 추가했습니다.
- Git을 사용하여 SSH 키로 커밋에 서명하도록 구성했습니다.
커밋에 서명하려면:
-
커밋에 서명할 때
-S
플래그를 사용하십시오:git commit -S -m "내 커밋 메시지"
-
선택 사항. 매번 커밋할 때
-S
플래그를 입력하고 싶지 않은 경우 Git에게 커밋을 자동으로 서명하도록 지시하십시오:git config --global commit.gpgsign true
- SSH 키가 보호되어 있는 경우 Git은 암호를 입력하라는 메시지를 표시합니다.
- GitLab으로 푸시합니다.
- 커밋이 확인됨을 확인하십시오.
서명 검증은
allowed_signers
파일을 사용하여 이메일과 SSH 키를 관련시킵니다. 이 파일을 구성하는 데 도움이 필요한 경우 로컬에서 커밋 확인을 읽어보십시오.
커밋 확인
모든 유형의 서명 된 커밋을 GitLab UI에서 확인할 수 있습니다. SSH 키로 서명된 커밋은 로컬에서도 확인할 수 있습니다.
로컬에서 커밋 확인
로컬에서 커밋을 확인하려면 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 signed commit
SSH 키의 서명된 커밋 취소
- GitLab 15.9에서 도입되었습니다. (소개됨)
SSH 키가 Compromised 상태가 되면 취소해야 합니다. 키를 취소하면 미래 및 과거 커밋이 모두 변경됩니다.
- 이 키로 서명된 과거 커밋은 확인되지 않음으로 표시됩니다.
- 이 키로 서명된 미래 커밋은 확인되지 않음으로 표시됩니다.
SSH 키를 취소하면 해당 키가 계정에서 제거됩니다. 인증에만 사용되는 SSH 키는 취소할 수 있는 옵션이 없습니다.
SSH 키를 취소하려면:
- 왼쪽 사이드바에서 아바타를 선택합니다.
- 프로필 편집을 선택합니다.
- 왼쪽 사이드바에서 SSH 키를 선택합니다 ().
- 취소하려는 SSH 키 옆에서 취소를 선택합니다.
- 선택 사항. SSH 키를 삭제합니다.