InfoGrab DocsInfoGrab Docs

SSH 키로 커밋 및 태그 서명

요약

SSH 키로 커밋이나 태그에 서명하면 GitLab은 GitLab 계정에 연결된 SSH 공개 키로 서명을 암호학적으로 검증합니다. GitLab 이 커밋을 검증된 것으로 인정하려면 다음 조건을 충족해야 합니다. 서명은 유효하지만 커미터 이메일이 계정의 인증된 이메일과 일치하지 않으면 해당 커밋은 Unverified로 표시됩니다.

SSH 키로 커밋이나 태그에 서명하면 GitLab은 GitLab 계정에 연결된 SSH 공개 키로 서명을 암호학적으로 검증합니다. 검증에 성공하면 GitLab 이 해당 커밋이나 태그에 Verified 레이블을 표시합니다.

GitLab 이 커밋을 검증된 것으로 인정하려면 다음 조건을 충족해야 합니다.

  • 커밋 서명에 사용한 SSH 키를 Authentication & Signing 또는 Signing 사용 유형으로 GitLab 계정에 추가해야 합니다.
  • Git 구성의 커미터 이메일 주소가 GitLab 계정에 연결된 인증된 이메일 주소와 일치해야 합니다.

서명은 유효하지만 커미터 이메일이 계정의 인증된 이메일과 일치하지 않으면 해당 커밋은 Unverified로 표시됩니다.

사용 유형이 Authentication & Signing 이라면 동일한 SSH 키를 GitLab에 대한 git+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을 구성하려면 다음 단계를 따릅니다.

  1. 커밋 서명에 SSH를 사용하도록 Git을 구성합니다.

    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 "My commit msg"
    
  2. 선택 사항. 커밋할 때마다 -S 플래그를 입력하지 않으려면 커밋에 자동으로 서명하도록 Git에 지정합니다.

    git config --global commit.gpgsign true
    
  3. SSH 키가 보호되어 있으면 Git 이 패스프레이즈 입력을 요청합니다.

  4. GitLab에 푸시합니다.

  5. 커밋이 검증되었는지 확인합니다. 서명 검증은 allowed_signers 파일을 사용해 이메일과 SSH 키를 연결합니다. 이 파일 구성 방법은 로컬에서 커밋 검증을 참고합니다.

태그 서명 및 검증#

히스토리

SSH 키로 커밋 및 태그에 서명하도록 Git을 구성한 뒤에는 태그에 서명할 수 있습니다.

  1. Git 태그를 생성할 때 -s 플래그를 추가합니다.

    git tag -s v1.1.1 -m "My signed tag"
    
  2. GitLab에 푸시한 다음 이 명령으로 태그에 서명되었는지 확인합니다.

    git tag --verify v1.1.1
    
  3. 선택 사항. -s 플래그 없이 태그에 자동으로 서명하려면 다음을 실행합니다.

    git config --global tag.gpgsign true
    

커밋 검증#

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

로컬에서 커밋 검증#

로컬에서 커밋을 검증하려면 Git 이 SSH 공개 키를 사용자와 연결할 수 있도록 allowed signers 파일을 생성합니다. 이 예시에서는 ~/.ssh/allowed_signers를 사용하지만 다른 경로를 지정해도 됩니다. 이후 단계에서도 같은 경로를 사용합니다.

  1. SSH 디렉터리를 생성합니다.

    mkdir -p ~/.ssh
    
  2. allowed signers 파일을 생성합니다.

    touch ~/.ssh/allowed_signers
    
  3. 해당 파일을 사용하도록 Git을 구성합니다.

    git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers"
    
  4. 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
    
  5. 검증하려는 사용자마다 이 단계를 반복합니다. 다른 기여자와 협업한다면 이 파일을 Git 리포지터리에 커밋하는 방안을 고려합니다.

  6. 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로 표시됩니다.

관련 주제#

SSH 키로 커밋 및 태그 서명

GitLab v19.5
Tier: Free, Premium, Ultimate
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 이라면 동일한 SSH 키를 GitLab에 대한 git+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을 구성하려면 다음 단계를 따릅니다.

  1. 커밋 서명에 SSH를 사용하도록 Git을 구성합니다.

    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 "My commit msg"
    
  2. 선택 사항. 커밋할 때마다 -S 플래그를 입력하지 않으려면 커밋에 자동으로 서명하도록 Git에 지정합니다.

    git config --global commit.gpgsign true
    
  3. SSH 키가 보호되어 있으면 Git 이 패스프레이즈 입력을 요청합니다.

  4. GitLab에 푸시합니다.

  5. 커밋이 검증되었는지 확인합니다. 서명 검증은 allowed_signers 파일을 사용해 이메일과 SSH 키를 연결합니다. 이 파일 구성 방법은 로컬에서 커밋 검증을 참고합니다.

태그 서명 및 검증#

히스토리

SSH 키로 커밋 및 태그에 서명하도록 Git을 구성한 뒤에는 태그에 서명할 수 있습니다.

  1. Git 태그를 생성할 때 -s 플래그를 추가합니다.

    git tag -s v1.1.1 -m "My signed tag"
    
  2. GitLab에 푸시한 다음 이 명령으로 태그에 서명되었는지 확인합니다.

    git tag --verify v1.1.1
    
  3. 선택 사항. -s 플래그 없이 태그에 자동으로 서명하려면 다음을 실행합니다.

    git config --global tag.gpgsign true
    

커밋 검증#

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

로컬에서 커밋 검증#

로컬에서 커밋을 검증하려면 Git 이 SSH 공개 키를 사용자와 연결할 수 있도록 allowed signers 파일을 생성합니다. 이 예시에서는 ~/.ssh/allowed_signers를 사용하지만 다른 경로를 지정해도 됩니다. 이후 단계에서도 같은 경로를 사용합니다.

  1. SSH 디렉터리를 생성합니다.

    mkdir -p ~/.ssh
    
  2. allowed signers 파일을 생성합니다.

    touch ~/.ssh/allowed_signers
    
  3. 해당 파일을 사용하도록 Git을 구성합니다.

    git config gpg.ssh.allowedSignersFile "$HOME/.ssh/allowed_signers"
    
  4. 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
    
  5. 검증하려는 사용자마다 이 단계를 반복합니다. 다른 기여자와 협업한다면 이 파일을 Git 리포지터리에 커밋하는 방안을 고려합니다.

  6. 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로 표시됩니다.

관련 주제#