서명된 Git 커밋에 Yubikey 사용

Git 커밋에 서명함으로써 사람들이 커밋에 태그가 지정된 작성자가 실제로 작성했는지 확인할 수 있습니다. 에 따라 Yubikey를 설정했다면 쉽게 구성할 수 있습니다.

설정



Yubikey를 삽입하고 잠금을 해제한 상태에서 GPG 키의 ID를 찾으십시오.

$ gpg --list-secret-keys --keyid-format LONG
/home/paulmicheli/.gnupg/pubring.kbx
------------------------------------
sec   r******/3**************E 2020-07-30 [SC] [expires: 2022-07-30]
      6***************************E
uid                 [ultimate] Paul Micheli <paul@*********.com>
ssb   r******/A***************0 2020-07-30 [E] [expires: 2022-07-30]

sec>  r******/D**************4 2020-07-30 [SC]
      3**************************************4
      Card serial no. = 0006 10300768
uid                 [ultimate] Paul Micheli <paul@*********.com>
ssb   r******/0**************8 2020-07-30 [E]

그런 다음 GitHub에 알릴 수 있도록 공개 키를 가져옵니다. 여기서 인수는 위 명령의 긴 ID입니다.

$ gpg --armor --export  A**********0
-----BEGIN PGP PUBLIC KEY BLOCK-----
m[NOPE NOT HAVING THE MIDDLE]
=ZDdO
-----END PGP PUBLIC KEY BLOCK-----

시작 및 끝 블록을 포함하여 위의 공개 키를 복사합니다and then add it as a new key on GitHub.

그런 다음 Git에 GPG를 사용하여 커밋, 특히 이 키에 서명하도록 지시해야 합니다. 이전에 실행한 --list-secret-keys 명령의 출력에서 ​​짧은 ID를 사용합니다. 내 예에서는 rsa3072/A97FDF705EF51C50을 따릅니다.

$ git config --global commit.gpgsign true

$ git config --global user.signingkey A**********0

거의 거기! 이제 GPG 에이전트를 다시 시작하겠습니다.

$ gpg-connect-agent reloadagent /bye

테스트



아무 저장소에서나 커밋하고 오류 메시지가 표시되지 않기를 바랍니다.

git log --show-signature를 실행하여 커밋이 서명되었는지 확인합니다.

$ git log --show-signature

commit 925fb1cae8c33c0f7f4fd6b270fc9f4cf6a8ef80 (HEAD -> master, origin/master, origin/HEAD)
gpg: Signature made Thu 30 Jul 2020 13:59:27 BST
gpg:                using RSA key 6**********************E
gpg: Good signature from "Paul Micheli <paul@*********.com>" [ultimate]
Author: Paul Micheli <paul@*********.com>
Date:   Thu Jul 30 13:59:27 2020 +0100

    signed commit test

푸시



지금까지 모든 것이 작동했다고 가정하면 이제 GitHub에서 멋진 "인증됨"배지의 찬란한 영광을 git push하고 만끽할 수 있습니다.

왜 귀찮아?



이 모든 것의 이점이 무엇인지 물을 수도 있습니다. 결국 SSH 키를 사용하여 이미 GitHub에 인증하고 있는 것입니다. 맞죠?

SSH 키는 GitHub와 대화할 수 있고 해당 리포지토리에 액세스할 수 있음을 증명합니다. 당신이 푸시하는 커밋이 실제로 플래그가 지정된 작성자에 의해 작성되었다는 것을 증명하지는 않습니다.

거짓 신원으로 커밋하는 것은 간단합니다.

git commit -m "implement sensible error handling" --author="Robby Bobby <[email protected]>"

그런 다음 이를 푸시하여 SSH 키(또는 HTTP 기본 자격 증명)로 인증할 수 있습니다. 이는 물론 완전히 유효합니다.

그런 다음 동료로 가장하여 급여 인상에 도움이 되는 멋진 코드를 밀어 넣었을 것입니다. 또는, 아마도 당신은 사악한 일을 했을 것입니다. 하지만 절대 그런 짓은 하지 않겠죠?

좋은 웹페이지 즐겨찾기