この記事では Git コミットに SSH 鍵を用いて署名する方法については触れない。
Git コミットに署名する方式として、最近では GPG 鍵より SSH 鍵を使用するほうがカジュアルで良い。
しかし Git コミット時に SSH 鍵を用いた署名を行うには、Git (2.34 以降) と SSH エージェントが必要であり、そのあたりが入っていない Dev Container などでコミットをしようとすると
Git: unsupported value for gpg.format: ssh
Git: cannot run ssh-keygen: No such file or directory
などとエラーが出てしまう。
Dev Container 内に Git (2.34 以降) と SSH エージェントを入れればいいという単純な話なので、その方法についてまとめる。
(方法1) DevContainer の Dockerfile に書く
例えば Debian 系のイメージを使用している場合は以下のように書けばよい。
RUN apt-get update \
&& apt-get install -y --no-install-recommends git openssh-client
ただし Debian 11 (Bullseye) で入る Git は 2.30 なので SSH 鍵による署名には対応していない。Debian 12 (Bookworm) の場合は 2.39 なので問題はない。Debian 11 (Bullseye) ベースのイメージで新しめの Git を入れたい場合は Debian Backports を使うとよい。(下記記事を参照)
(方法2) Dev Container Features を使用する
Dev Container Features という「Dev Container に機能を追加する仕組み」があり、Dockerfile をわざわざ書きたくない場合はこれを使うこともできる。
参考: Dev Container Features reference
この仕組みを使って Git と SSH Agent を追加するには、Dev Container の設定ファイルに以下を追記して再ビルドする。
{
"features": {
"ghcr.io/devcontainers/features/git:1": {"version": "latest"},
"ghcr.io/devcontainers/features/sshd:1": {}
}
}
(方法1)
に書いたのと同じ理由で、イメージが Debian 11 のときに SSH 鍵署名未対応のバージョンの Git がインストールされてしまうため、新しめの Git を入れるために "version": "latest"
と指定している。