問題の調査
ターミナルを使ってサーバーに接続し、Yubikey 内の GPG キーで Git コミットに署名しようとした際にエラーが表示されました。簡単な調査内容:
有効な秘密鍵が存在するか確認:
bash
gpg --list-secret-keys --keyid-format LONG
スマートカードが正しく読み取れるかテストする:
bash
gpg --card-status
GPG を直接使って署名テスト:
bash
echo \"test\" | gpg --clearsign
出力結果:
bash
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
test
gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
エラーメッセージから、複数のターミナル環境では GPG が現在使用している端末デバイスを自動認識できず、PIN コードの入力プロンプトが正しくユーザーに伝わらないことが分かりました。GPG_TTY 環境変数の設定で修正を試みます:
bash
export GPG_TTY=$(tty)
再度署名テストを行う:
認証ダイアログが正常に表示され、これで問題が解決されました。