1Passwordで管理しているSSHキーを使ってコミット署名をする

こんにちは、 id:numanuma08 です。

開発でGit/GitHubを使っている方でコミット署名を設定している方は多いと思います。OSSのリポジトリによってはPRを作成するためにコミット署名を強制している場合もあります。

また、GitHubにプッシュするためのSSHキーを1Passwordで管理している方もいると思います。複数の端末で開発する際、1Passwordを使えば秘密鍵・公開鍵の管理が簡単になりますから。

今までGit署名はGPGキーが必須だと思っていましたが、SSHキーも使えるようになっていました。どうやら2021年頃から対応していたようでしたね。知らんかった・・・。SSHキー署名が使えるなら1Passwordで管理しているSSHキーも使えるのでは?と思ったので設定してみました。

1PasswordでSSHキーを管理する

1PasswordでSSHキーを管理する方法は今回は割愛します。公式サイトのドキュメントを参照するのが良いかと思います。

developer.1password.com

1Passwordで管理しているSSHキーをGit署名に使う

こちらもGitHubのマニュアルが充実しているので、基本はそちらの参照が良いです。

docs.github.com

1PasswordでSSHキーを管理していると、1Passwordのアプリ上に "Next step: Sign Your Git Commits"と表示され、Git署名の設定を促されます。

GitHubのマニュアルと照らし合わせながらSSHキーによる署名の設定をします。

GitHubに公開鍵を登録する

GitHubの設定ページ内で「SSH and GPG keys」を開き「NEW SSH key」を選びます。SSHキー追加画面でタイトルと公開鍵を入力しますが「Key type」を「Signing Key」とします。

Add ssh key

1Passwordのブラウザ拡張を使っているとタイトルとKeyを自動で埋めてくれる場合があります。

Git署名の設定

開発マシンのグローバルな.gitconfigファイルに記載する内容を取得します。1PasswordアプリでSSHキーを開き "Next step: Sign Your Git Commits" にある Configure を押すと使っている環境に応じた設定ファイルの内容が取得できます。例えば、私が普段使っているWSL環境は以下の内容でした。

[user]
  signingkey = <省略>
[gpg]
  format = ssh

[gpg "ssh"]
  program = "/mnt/c/Users/numa08/AppData/Local/1Password/app/8/op-ssh-sign-wsl"

[commit]
  gpgsign = true

Windowsの場合 "Configure for Windows Subsystem for Linus (WSL)"にチェックをするとWindows向けとWSL向け設定を切り替えられるようです。

WSL設定の切り替え

WSLの場合、WSL環境から1PasswordのSSH agentを使う設定も必要ですが、そちらについても割愛します、

まとめ

Git署名のSSHキーを1Passwordで管理する方法を紹介しました。誰がコミットしたのかを明らかにするGit署名ですが、開発マシンが複数ある場合などGPGキーの管理が煩雑になりがちでした。1Passwordを使ってSSHキーで署名することで、それらを一元管理できるため、管理コストが下がってむしろセキュアになるのかなと思います。