credential管理をorg-encryptからpassword-storeに移行した
Table of Contents
Introduction
credential管理をorg-encryptからpassword-storeに移行したので作業内容をメモしておく。
現状の運用と問題
org-crypt運用メモ に書いたとおり、 ~/.aws/credentials
のような秘匿情報を secret.org
を org-babel-tangle
して出力していた。
次のように org-decrypt-entries
と org-encrypt-entries
をadviceして対応していたのだが、org-nix-shell がうまく動かなくなってしまった。
(advice-add 'org-babel-tangle :before #'org-decrypt-entries)
(advice-add 'org-babel-tangle :after #'org-encrypt-entries)
ob-async を有効にした時もorg-nix-shellが実行できなくなってしまったので、 advice-add
をすると問題が起きるのかもしれない。(要検証)
org-nix-shell入門 にも書いたが、org-nix-shellはキラーアプリケーションなので消す訳にはいかない。
M-x org-encrypt-entries
を手動で実行する運用にしていたが、うっかり叩き忘れたままcommitを何度かしてしまった。
newren/git-filter-repoなどを使ってcommit hisotryから消したが面倒だった。
また、mcp-servers-nixを導入した時点では実装されてなかったが、mcp-servers-nix は passwordCommand
をサポートしてくれた。
よい機会なのでpassword-store管理に移行にすることにした。
作業手順
1. 既存のorg-encryptしてた鍵情報をpassword-store管理下に移行
次のように秘密鍵をpassコマンドで検索できるようにする。
pass show gemini/private
2. org-babel templateを作成
passコマンドをwrapするコマンドを用意する。
#+name: pass
#+begin_src emacs-lisp :var id="" :results value raw
(string-trim (shell-command-to-string (format "pass show %s" id)))
#+end_src
3. 各秘密鍵に埋め込み
:noweb yes
で関数を実行できるようにする。
M-x org-babel-tangle
を実行すると、秘密鍵の入った状態で ~/.aider.conf.yml
が出力される。
** ~/.aider.conf.yml
#+begin_src yaml :tangle (expand-file-name "~/.aider.conf.yml") :mkdirp yes :noweb yes
dark-mode: true
model: gemini
api-key:
- gemini=<<pass(id='gemini/private')>>
#+end_src
終わりに
外部コマンドを叩いてる関係で多少tangleに時間がかかるようになってしまったが許容できる範囲内。 長年秘密鍵の管理方法について悩んでたけど方針が決まってよかった。