gpg (GnuPG)
秘匿情報をgpgファイルから取得する
init.el に直接書きたくない秘匿情報の扱いに困ることがたまにあって、
gpgファイルについて調べた。よく分かってないこともあるが、以下で自分に必要な最低限のことはできる。
(※対象環境はMacOS)
インストール
pgp と pinentry-mac をインストール
brew install gnupg
brew install pinentry-macpinentry-macはパスフレーズを入力するためのUIで、 PGPファイルをパスフレーズで暗号化するときに使用する。
インストールしたら、 .bashrc で以下の環境変数を設定し、
export GPG_TTY=$(tty)さらに、pgp-agent.confでpinentry-programを指定する。
echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.confgpgをインストールしただけだと、パスフレーズ入力のタイミングでエラーになるので注意
Error while encrypting with “/opt/homebrew/bin/gpg”:
gpg: problem with the agent: Inappropriate ioctl for device gpg: error creating passphrase: Operation cancelled gpg: symmetric encryption of ‘[stdin]’ failed: Operation cancelled
PGPファイルの作成
~/.authinfo.gpg に以下の形式でgpgファイルを作成する。
machine gcal-client-id login your-client-id password 123456789-abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com
machine gcal-client-secret login your-client-secret password ABCDEF-GhIjKlMnOpQrStUvWxYz- machine はサービスや識別子を指定する。
elispから:hostで指定する - login は本来ユーザー名らしいけど、今回は使わない
- password の後に実際の値(クライアントIDやクライアントシークレット)を記述する。
elisp
elispからは auth-source パッケージの auth-source-pick-first-password を使って設定した password
の値を取得できる
(setq auth-sources '("~/.authinfo.gpg"))
(setq gcal-client-id
(auth-source-pick-first-password :host "gcal-client-id"))
(setq gcal-client-secret
(auth-source-pick-first-password :host "gcal-client-secret"))