devcontainers環境で1passwordのssh agentを利用してコミット署名する

Dev containerでの1Password SSH Agentを使ったコミット署名時のエラーを対処する を参考にして設定したのだけど、一部リンク先のエントリとは異なる点があったのと、別の要因にハマったのでそれのメモです。リンク先はwindowsで僕はmacという違いなのかVScodeのバージョンが変わって振る舞いが変わったのかはよくわかりません。

ホスト側のgitconfigを必要な分だけコピーするときの設定

リンク先の「解決策2: gitconfigのコピーを無効化する」を参考にしてdotfilesを使ってみたのだけど、~/.gitconfigに追記するやり方だとなぜか[credential]の項目が書き込まれなくて期待通りの挙動にはなりません。そして~/.config/git/configに書き込んだ場合には同じファイル(~/.config/git/config)の末尾に[credential]が書き込まれます。

謎な挙動だけど動いたのでとりあえずこれでいいか…となっています。

1passwordのsocketを利用する

1password公式のドキュメント Sign Git commits with SSH | 1Password Developer だとSSH_AUTH_SOCKはoptional扱いだったので設定していなかったのだけど、devcontainers環境で1passwordを利用したい場合は設定必須のようで、SSH_AUTH_SOCKを1passwordのものに設定するとうまく動きました。

SSH_AUTH_SOCKの設定前にdevcontainers環境をVSCodeで起動していて、その上でリビルドするとホスト側のSSH_AUTH_SOCK環境変数を読まないので設定が反映されない、という事があり30分くらいハマりました。VSCodeを起動しなおしたら解決しました。

(追記)-slim系のDockerイメージを利用している場合はopenssh-clientを明示的にインストールしておく必要がある

apt-get update && apt-get install openssh-client