もやし日誌

日記のようなもの

GnuPG2にpublic key decryption failed: Inappropriate ioctl for deviceと怒られた時の対処法

gpg: encrypted with 4096-bit RSA key, ID XXXXXXXXXXXX, created 2018-03-06
      "Tsumugi Shiraishi <tsumugi@example.com>"
gpg: public key decryption failed: Inappropriate ioctl for device
gpg: decryption failed: No secret key

なんやいね、これは!?

WSL(Ubuntu 18.04)でGnuPG2を使おうと思ったらこんなエラーが出て鍵の復号化が出来ず困った。

ちなみにCUIメインの運用になるので、pinentryにはpinentry-cursesを使ってます。

$ cat ~/.gnupg/gpg-agent.conf
pinentry-program /usr/bin/pinentry-curses

解決策

.bashrc(zshなら.zshrc)に以下の設定を追記する。

export GPG_TTY=$(tty)

どうやらpinentry-cursesが正しい出力先のttyを認識出来ていないとこのようなエラーが出る模様。(恐らく初期設定だと/dev/ttyとかに向いていると思われる)

ので、シェルが立ち上がる時に正しいttyを設定してあげると直る模様。

あとがき

というかちゃんと設定しろって公式のマニュアルにも書いてありましたね... ちゃんと読むべきでした。

gnupg.org