• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (212)
      • react & next.js (12)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • github 에서 서명된 커밋 (gpg) 사용하기
        2022년 08월 01일
        • 루루개발자
        • 작성자
        • 2022.08.01.오후11:41
        반응형

        안녕하세요! 루루개발자 입니다.

        회사 업무를 하다 보면 가끔은 집에 있는 개인 PC 에서 재택으로 일을 하는 경우가 있는데, 그러다보니 git 의 글로벌 설정으로 user.name 과 user.email 을 회사 계정으로 설정해두고 사용하고 있었습니다. 하지만 가끔은 제 개인 레포지토리에 푸쉬를 날릴 때도 있는데, 이 때 실수로 제 회사 계정 정보로 커밋된 정보가 제 개인 레포지토리로 푸쉬 되는 경우가 종종 있었습니다. 이를 방지하기 위해 github 에서 public 으로 공개된 제 개인 레포지토리들의 branch rule 에서 서명된 커밋만 푸쉬가 가능하도록 설정하였고, 이후 서명된 커밋을 이용하는 방법에 대해 공유드리고자 합니다.

         

        1. 개발 PC 에서 gpg 설치하기

        우선 커밋할 때 서명을 사용하기 위해서는 gpg 를 설치해야 합니다.

         

        Window 인 경우에는 아래 링크에서 설치하시면 됩니다.

        https://gpg4win.org/get-gpg4win.html

         

        Gpg4win - Get Gpg4win

         

        gpg4win.org

         

        Linux 인 경우에는 배포판인 경우 기본적으로 gpg 가 설치되어 있습니다.

         

        Mac OS 인 경우에는 아래 명령어로 설치하시면 됩니다.

        brew install gnupg2

         

        2. gpg private key 생성하기

        아래 명령어를 입력하여 커밋에 서명할 때 사용할 gpg private key 를 생성합니다.

        gpg --full-generate-key

         

        1. Please select what kin of key you want

        Please select what kind of key you want:
           (1) RSA and RSA (default)
           (2) DSA and Elgamal
           (3) DSA (sign only)
           (4) RSA (sign only)
          (14) Existing key from card
        Your selection?

        => 1 을 입력하고 Enter

         

        2. RSA keys may be between 1024 and 4096 bits long

        RSA keys may be between 1024 and 4096 bits long.

        => 4096 을 입력하고 Enter

         

        3. Please specify how long the key should be valid

        Please specify how long the key should be valid.
                 0 = key does not expire
              <n>  = key expires in n days
              <n>w = key expires in n weeks
              <n>m = key expires in n months
              <n>y = key expires in n years

        => 원하는 유효기간을 입력하고 Enter

         

        4. Is this correct? (y/N)

        Is this correct? (y/N)

        => y 를 입력하고 Enter

         

        5. Real name:

        Real name:

        => 커밋할 때 user name 에 해당하는 값을 입력하고 Enter

         

        6. Email address:

        Email address:

        => 커밋할 때 user email 에 해당하는 값을 입력하고 Enter

         

        7. Comment:

        Comment:

        => 원하는 Commnet 를 입력하고 Enter

         

        8. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

        You selected this USER-ID:
            "honggildong <honggildong@test.com>"
        
        Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?

        => 수정할 부분이 없다면 O 를 입력하고 Enter

         

        9. Please enter the passphrase to protect your new key

        => private key 에 대한 암호를 입력 후 Enter

         

        이렇게 해서 private key 생성이 완료되었습니다.

         

        3. gpg public key 생성하기

        우선 아래 명령어를 입력하여 gpg private key 목록을 확인합니다.

        gpg --list-secret-keys --keyid-format LONG

         

        그럼 다음과 같이 결과가 표시됩니다.

        gpg: checking the trustdb
        gpg: marginals needed: 3  completes needed: 1  trust model: pgp
        gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
        /root/.gnupg/pubring.kbx
        ------------------------
        sec   rsa4096/92C6F339530BAB4F 2022-08-01 [SC]
              FA34272A16E3C69B1648AB3E92C6F339530BAB4F
        uid                 [ultimate] honggildong <honggildong@test.co>
        ssb   rsa4096/8DA2A021FC72E5CA 2022-08-01 [E]

         

        위 결과 중에 "sec     rsa4096/" 다음에 표시된 secret key id 에 해당하는 문자를 복사해둡니다. (위 예시 결과에서는 "92C6F339530BAB4F" 에 해당합니다.)

         

        그리고 아래 명령어를 입력합니다.

        gpg --armor --export {secret key id}

        {secret key id} 부분에는 아까 복사한 secret key id 를 입력하면 됩니다.

         

        그럼 다음과 같이 public key 가 표시됩니다.

        -----BEGIN PGP PUBLIC KEY BLOCK-----
        
        mQINBGLn17gBEADE7amSrFXua7qesXVEv4YnwJ7LSm2KEmyHf8TIRVvLwF952Gi7
        dSVAvOXaRo/Smxe+MsNSftHfaRmQhSE5K8CGRuz9UqA9bAXUrFBaV/eoKpzkTYu0
        oGYLMYfJP/0DMWFCF/c0cz/eL2HE3BB0VBWOYxmZ5wkTLFU1fGdu1sPy4z3i8l/m
        1KZp+g3tUIO5bJAb/UnteS77Us2Did4nIAIIJe/UdYy/yHECdvO7kc8+PWZWWECJ
        OnKpf54Ai2xs3ylV3mfbmsWAuV7GiEIK/UaENVf9xJOwy1uoIQ1dWGFrjYj+coDA
        ...
        ... (중간 생략)
        ...
        Tqnamb6Cl0+Ey6+0J9YrNL/l/4wE6ok7vGdZCCccssVlqqFCSi/zgZonQjHjCZA2
        mlkjDqxPX288KwIwtq4lR2Ajz9E+FuQvbVwR/wFZ69kxKi0qhd/Rxt64nH+GfOtK
        Mvw5jMySOETdxgzQ0hUOsTXgw1z7NgWklSmYUa51+tMWcbO0eBSF+7qy1ly77jG8
        kFZkTTG95RAYEMTl2V4GNDrThNMpvsdhz3G6WuQY0qtCPChXAsjT37tDfhaQxfhy
        vrM9G6TUIrvuF9DEwPAaKI5zvKbigHLsV2/TK85BD9FM4Go4NJNkLPcS1sWjliMh
        plq0RJEFznS8DXSOrEjjEKce5E9YuSH9pwY+xtSFWwi0m2TAHevBH4QFZVRv
        =fN8V
        -----END PGP PUBLIC KEY BLOCK-----

         

        위에 나온 public key 를 복사해 둡니다.

         

        4. github 에 gpg key 등록하기

        이제 public key 를 github 에 등록해보겠습니다.

         

        1. github 에 로그인 한 후 아래 url 에 접속합니다.

        https://github.com/settings/keys

         

        GitHub: Where the world builds software

        GitHub is where over 83 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

        github.com

         

        2. New GPG Key 버튼을 클릭합니다.

         

        3. Key 부분에 아까 복사한 public key 를 붙여넣고 Add GPG Key 버튼을 클릭합니다.

         

        이제 github 에 gpg public key 가 등록되었습니다.

         

        5. 서명된 커밋만 푸쉬 가능하도록 설정하기

         

        1. github 에서 서명된 커밋만 허용할 레포지토리의 설정 화면으로 들어가 좌측 메뉴 중에 "Branch" 를 클릭합니다.

         

        2. Add rule 을 클릭합니다.

         

        3. Branch Rule 이 적용될 branch 명 조건을 적습니다.

        => * 로 지정하면 모든 브랜치에 rule 이 적용됩니다.

         

        4. "Require signed commits", "Include administrators" 항목에 체크합니다.

         

        5. create 버튼을 클릭합니다.

         

        6. 개발 PC 에서 프로젝트 git config 설정하기

        이제 커밋을 할 때 서명을 적용할 프로젝트 경로로 가서 아래 명령어들을 입력해줍니다.

         

        1. 커밋 할 때 gpg 서명 사용 옵션을 활성화 합니다.

        git config commit.gpgsign true

         

        2. gpg program 경로를 지정합니다.

         

        Window 인 경우는 아래 명령어를 입력합니다.

        git config gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

         

        Linux 인 경우는 아래 명령어를 입력합니다.

        git config gpg.program /usr/local/bin/gpg

         

        Mac 인 경우는 아래 명령어를 입력합니다.

        git config gpg.program /opt/homebrew/bin/gpg

         

        경로는 다소 상이할 수도 있으니 gpg 가 설치된 경로가 저게 맞는지 꼭 확인해보세요!

         

        3. commit 에 사용할 서명키 설정

        아래 명령어를 입력합니다.

        git config user.signingkey {secret key id}

        => {secret key id} 부분에는 "gpg --list-secret-keys --keyid-format LONG" 명령어 결과에서 확인했던 secret key id 를 입력하면 됩니다.

         

        4. mac vscode 에서 commit 시 "gpg failed to sign the data" 에러가 발생하는 경우

        brew install pinentry-mac

        위 명령어를 입력 후 vscode 에서 커밋 재시도를 합니다.

        만약 그래도 안된다면, 아래 명령어를 통해 터미널로 커밋을 시도합니다.

        export GPG_TTY=$(tty)
        git commit -m "커밋 메시지"

         

        7. private key 백업과 private key 불러오기

        private key 를 따로 백업하여 별도의 저장소에 저장해야 하는 경우가 있을 수 있습니다. 그럴 때는 아래 명령어를 통해 private key 를 파일로 내보내기 할 수 있습니다.

        gpg --export-secret-keys --armor {secret key id} > {백업 경로}

         

        반대로 private key 를 불러와야 하는 경우에는 아래 명령어를 통해 불러올 수 있습니다.

        gpg --import {private key 경로}

         

        마무리하며

        이제 해당 레포지토리에서 해당 조건에 해당하는 branch 에 푸쉬를 할 때는 서명된 커밋을 필요로 하게 됩니다. 만약 커밋이 서명되어 있지 않거나, 서명의 name, email 과 커밋한 자의 name, email 이 일치하지 않는다면 github 로 푸쉬가 되지 않습니다. 서명된 커밋을 사용하는 이유는 커밋한 자의 name 과 email 이 정말 본인이 맞는지 확인하기 위함입니다. 만약 서명된 커밋을 사용하지 않는다면 레포지토리의 권한이 있는 다른 사람이 나의 name 과 email 로 설정하고 커밋 후 푸쉬하면 github 에는 내 계정 정보로 커밋한 기록이 생성되게 됩니다. 내가 푸쉬한게 아닌데도 내가 한걸로 나오게 된다는 말이죠. 이를 방지하기 위해 각 작업자별로 gpg private key, public key 를 생성하고 각 작업자들은 본인들의 gpg private key 로 커밋을 서명하고 푸쉬를 하는 것입니다.

         

         

         

         

        반응형

        'IT 기타' 카테고리의 다른 글

        안드로이드 디바이스가 절전모드일 때 발생한 이슈  (0) 2022.10.01
        GET 메소드 요청시 body 를 보낼 수 있을까?  (0) 2022.08.28
        OAuth 2.0 에 대하여  (0) 2021.11.27
        OSI 7계층  (0) 2021.10.27
        프로세스(Process)와 스레드(Thread)  (1) 2021.10.25
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • 1. 개발 PC 에서 gpg 설치하기
      • 2. gpg private key 생성하기
      • 1. Please select what kin of key you want
      • 2. RSA keys may be between 1024 and 4096 bits long
      • 3. Please specify how long the key should be valid
      • 4. Is this correct? (y/N)
      • 5. Real name:
      • 6. Email address:
      • 7. Comment:
      • 8. Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
      • 9. Please enter the passphrase to protect your new key
      • 3. gpg public key 생성하기
      • 4. github 에 gpg key 등록하기
      • 1. github 에 로그인 한 후 아래 url 에 접속합니다.
      • 2. New GPG Key 버튼을 클릭합니다.
      • 3. Key 부분에 아까 복사한 public key 를 붙여넣고 Add GPG Key 버튼을 클릭합니다.
      • 5. 서명된 커밋만 푸쉬 가능하도록 설정하기
      • 1. github 에서 서명된 커밋만 허용할 레포지토리의 설정 화면으로 들어가 좌측 메뉴 중에 "Branch" 를 클릭합니다.
      • 2. Add rule 을 클릭합니다.
      • 3. Branch Rule 이 적용될 branch 명 조건을 적습니다.
      • 4. "Require signed commits", "Include administrators" 항목에 체크합니다.
      • 5. create 버튼을 클릭합니다.
      • 6. 개발 PC 에서 프로젝트 git config 설정하기
      • 1. 커밋 할 때 gpg 서명 사용 옵션을 활성화 합니다.
      • 2. gpg program 경로를 지정합니다.
      • 3. commit 에 사용할 서명키 설정
      • 4. mac vscode 에서 commit 시 "gpg failed to sign the data" 에러가 발생하는 경우
      • 7. private key 백업과 private key 불러오기
      • 마무리하며
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.