SSH 키로 커밋에 서명하기

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

SSH 키로 커밋에 서명할 때, GitLab은 GitLab 계정과 연결된 SSH 공개 키를 사용하여 커밋 서명을 암호화적으로 확인합니다. 성공하면, GitLab은 커밋에 검증됨 레이블을 표시합니다.

git+ssh 인증 및 커밋 서명에 동일한 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 버전을 사용 중이라면, OpenSSH 8.8로 업그레이드하십시오.

  • 인증 & 서명 또는 서명 유형의 SSH 키. SSH 키는 다음 중 하나여야 합니다:

Git을 키 사용하도록 구성하려면:

  1. 커밋 서명을 위해 Git을 SSH 사용하도록 설정합니다:

    git config --global gpg.format ssh
    
  2. 사용할 공개 SSH 키를 서명 키로 지정하고 파일 이름(~/.ssh/examplekey.pub)을 사용한 키의 위치로 변경합니다. 사용한 키를 생성한 방법에 따라 파일 이름이 다를 수 있습니다:

    git config --global user.signingkey ~/.ssh/examplekey.pub
    

SSH 키로 커밋에 서명하기

전제 조건:

커밋에 서명하려면:

  1. 커밋에 서명할 때 -S 플래그를 사용합니다:

    git commit -S -m "나의 커밋 메시지"
    
  2. 선택 사항. 매번 커밋할 때 -S 플래그를 입력하지 않으려면, Git에게 커밋을 자동으로 서명하도록 지시합니다:

    git config --global commit.gpgsign true
    
  3. SSH 키가 보호되어 있다면, Git은 암호를 입력하라는 프롬프트를 표시합니다.
  4. GitLab에 푸시합니다.
  5. 커밋이 검증됨인지 확인합니다. 서명 확인은 allowed_signers 파일을 사용하여 이메일과 SSH 키를 연결합니다. 이 파일을 구성하는 데 도움이 필요하면, 로컬에서 커밋 확인을 참조하세요.

커밋 확인하기

모든 유형의 서명된 커밋을 GitLab UI에서 확인할 수 있습니다. SSH 키로 서명된 커밋은 로컬에서도 확인할 수 있습니다.

로컬에서 커밋 확인하기

로컬에서 커밋을 확인하려면, Git이 SSH 공개 키를 사용자와 연결하도록 허용된 서명 파일을 생성합니다:

  1. 허용된 서명 파일 생성:

    touch allowed_signers
    
  2. Git에서 allowed_signers 파일을 구성합니다:

    git config gpg.ssh.allowedSignersFile "$(pwd)/allowed_signers"
    
  3. 허용된 서명 파일에 항목을 추가합니다. 이 명령을 사용하여 이메일 주소와 공개 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
    
  4. 여러 사용자의 서명을 확인하려면, 각 사용자에 대해 이전 단계를 반복합니다. 여러 다른 기여자의 서명을 로컬로 확인하려면 이 파일을 Git 리포지토리에 체크인하는 것을 고려하세요.

  5. 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 키를 취소하려면:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. 왼쪽 사이드바에서 SSH 키 ()를 선택합니다.
  4. 취소하려는 SSH 키 옆에서 취소를 선택합니다.
  5. 선택 사항. SSH 키를 삭제합니다.

관련 주제