2 분 소요

필자의 macOS gnupg 설정

이번엔 GnuPG(이하 gpg) 관련 init 포스팅 이다. 필자의 경우 gpg를 사용해 메일을 signing 하는 일은 자주 없지만 commit signing 혹은 실명 signing은 가끔 있었다. 따라서 이에 관해 기억용 포스트를 남기려 한다.

1. Environment

  • OS: macOS Ventura 13.2
  • Model: Apple MacBook Air 2020
  • Package
    • brew
    • git
    • 명령어 라인 도구 (git이 포함되어 있다)

2. Import Keys (or Gen Keys)

우선 필자는 사용 중인 gpg 키가 있으므로 import 하는 법을 기준으로 설명한다. 생성을 해야하는 경우 필자보다 필력이 좋은 다른 좋은 블로그 글이 많으니 참고 바란다.

# Install GnuPG Package
$ brew install gpg

# Import key
$ gpg --import private_key_file
$ gpg --import public_key_file

# Checkout imported key
$ gpg --list-secret-keys

# For me
brew install gpg && gpg --import ~/Downlaods/prikey.gpg.D2219C6A.Homin_Rhee.asc && gpg --import ~/Downloads/pubkey.gpg.D2219C6A.Homin_Rhee.asc

Line. 9 까지가 키를 import 한 뒤 확인하는 과정이다.

3. Trust My Private Key

가져온 private key를 ultimately level로 신뢰를 하여야 사용이 가능하다. 따라서 우선 나의 키 값을 확인 후 편집을 해야한다.

# Check out my key value
$ gpg --list-secret-keys
/Users/icaros7/.gnupg/pubring.kbx
---------------------------------
sec   rsa4096 20**-**-** [SC] [expires: 20**-**-**]
      1D94A7086346FBF11DD16E1F49578AFED2219C6A #	My key value
uid           [unknown] Homin Rhee <hominlab@gmail.com>
uid           [unknown] Homin Rhee <hominlab@live.co.kr>
uid           [unknown] Homin Rhee <hominlab@minnote.net>
uid           [unknown] Homin Rhee <hominlab@harukasan.org>
ssb\#  elg4096 20**-**-** [E] [expires: 20**-**-**]

# Enter edit mode
$ gpg --edit-key My-key-value

# Trust my private key
gpg> trust

# I trust ultimately
gpg> 5

# Save my changes
gpg> save

# For me
gpg --edit-key 1D94A7086346FBF11DD16E1F49578AFED2219C6A

4. Git Configuration

# Global config
$ git config --global user.signingkey My-Key-Value
$ git config --global commit.gpgsign true
$ git config --global gpg.program gpg

# For me
git config --global user.signingkey 1D94A7086346FBF11DD16E1F49578AFED2219C6A && git config --global commit.gpgsign true && git config --global gpg.program gpg

혹시 brew를 통해 설치 하지 않거나 제대로 경로가 잡히지 않는 경우 where gpg 등을 이용해 실제 경로를 ~/.gitconfig 를 수정해 지정해주면 된다.

5. Troubleshooting

5-1. error: gpg failed to sign the data

$ git commit -m 'M: Update design pattern'
error: gpg failed to sign the data
fatal: failed to write commit object

# Can't display this screen
           ┌───────────────────────────────────────────────────────────────┐
           │ Please enter the passphrase to unlock the OpenPGP secret key: │
           │ "Homin Rhee <hominlab@gmail.com>"                             │
           │ 4096-bit RSA key, ID 49578AFED2219C6A,                        │
           │ created 20**-**-**.                                           │
           │                                                               │
           │                                                               │
           │ Passphrase: ************************************************_ │
           │                                                               │
           │         <OK>                                   <Cancel>       │
           └───────────────────────────────────────────────────────────────┘

우선 이 문제는 자주 겪는 문제이다. 추측하기엔 gpg 키 인증 비밀번호 입력 창이 출력되지 않아 생기는 문제 인 것 같다.

해결 방안

brew reinstall pinentry && gpgconf --kill gpg-agent

우선 pinentry 패키지를 재설치하고, gpg-agent를 재실행 해본다. 해결이 되지 않는 경우 shell의 config에 gpg가 출력할 TTY를 명시해주면 된다.

# Add follow line to ~/.zshrc end point
export GPG_TTY=$(tty)

source ~/.zshrc