Intellij 계열의 제품군에서 'gpg failed to sign the data' 오류

How to fix 'gpg failed to sign the data' error in Intellij when sign git commit with GPG key

Intellij 계열의 제품군에서 'gpg failed to sign the data' 오류

서론

Jetbrains 사의 Intellij 계열의 제품군 중 PyCharm 안에서 git 을 사용하던 도중 서명된 커밋(signed commit)을 할 때 gpg failed to sign the data failed to write commit object 에러가 나서 직접 터미널을 열고 커밋을 했었는데, 너무 귀찮아서 결국 구글링을 해봤습니다.

(저는 맥 OS에서 사용하고 있다가 해당 현상을 겪었습니다.)

원인

Git signed commit 을 할 때에 기본적으로 제공하는 패스워드 입력 인터페이스는 tty 를 사용하기 때문에, 기본적으로 tty 없이 사용하는 Intellij 계열의 IDE (이하 IDE) 에서는 패스워드를 입력받을 수 없습니다.

해결 시도 1

그렇기 때문에 --batch --no-tty 옵션을 사용하여 서명을 하도록 하면 IDE에서도 서명된 커밋을 할 수가 있게 됩니다.

  1. /usr/local/bin/gpg-no-tty 파일을 만들고, 다음과 같이 작성합니다.
#!/bin/bash
/usr/bin/gpg --batch --no-tty "$@"
  1. /usr/local/bin/gpg-no-tty 파일에 실행권한을 줍니다.

chmod +x /usr/local/bin/gpg-no-tty

  1. 홈 폴더의 최상위 폴더에 .gitconfig 파일이 있습니다. (없다면 만들어주세요.) 그리고 다음 내용을 추가합니다.
[gpg]
program = gpg-no-tty

(또는 git config --global gpg.program gpg-no-tty 를 입력하셔도 됩니다.)

이와 같이 진행할 경우 IDE는 암호를 저장하고 해당 암호를 가지고 자동으로 서명된 커밋을 할 수 있는 gpg-agent 를 사용한다고 합니다.

더 자세한 내용을 알고싶으시면 원문 1을 참조해주시면 될 것 같습니다.

해결 시도 2

이렇게 진행했지만 저는 해결이 되지 않아 원문 2를 참고하여 똑같이 tty를 비활성화 시킬 수 있도록 ~/.gnupg/gpg.conf 파일에 다음과 같이 입력하였습니다.

# This option tells gpg not to expect a TTY interface and allows IntelliJ to sign commits
no-tty

해결 시도 3

2 번째 방법까지도 해봣는데 안돼서 제가 사용하는 mac os 에서는 따로 설정을 해줘야 하나..? 라는 생각에 구글링을 하다가 원문 3을 찾게 되었습니다.

Mac OS 한정으로 다음과 같이 진행하여 해결하였습니다.

  1. brew cask install keybase 를 통해 keybase 를 설치합니다.
  2. brew install pinentry-mac 를 통해 pinentry-mac 를 설치합니다.
  3. ~/.gnupg/gpg-agent.conf 파일에 다음과 같이 내용을 추가합니다.
pinentry-program /usr/local/bin/pinentry-mac

이후, 다음처럼 인증창이 나오면서 이제는 Intellij 에서도 드디어 서명된 커밋을 할 수 있었습니다.

pinentry

출처

원문 1
원문 2
원문 3

이 글의 라이센스

CC BY-NC-SA 4.0 (ko / en)