0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dev Container でも Git コミットに SSH 鍵署名したい

Posted at

この記事では 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 系のイメージを使用している場合は以下のように書けばよい。

Dockerfile
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 の設定ファイルに以下を追記して再ビルドする。

.devcontainer.json
{
  "features": {
    "ghcr.io/devcontainers/features/git:1": {"version": "latest"},
    "ghcr.io/devcontainers/features/sshd:1": {}
  }
}

(方法1) に書いたのと同じ理由で、イメージが Debian 11 のときに SSH 鍵署名未対応のバージョンの Git がインストールされてしまうため、新しめの Git を入れるために "version": "latest" と指定している。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?