あるマシンの GPG 鍵ペアを別のあるマシンでも使いたい場合にすること、手順のメモ。Git, GitHub, VSCode 関連のおまけ付き
さいきんは多くの作業は WSL / Ubuntu でしているのだけど、 WSL の親になってる Windows でも VSCode や Visual Studio で作業する機会が増えてきました。git
のコミットだけ WSL で /mnt/c/...
へ辿ってやったりすればいいのだけど、事実上同じ(だけど論理的には別になってる)マシンなので同じ GPG 鍵ペアーを使えるようにしようかなって思ったので、その手順のメモ。
環境
メモの例に somebody@example.com
を ID にします。あるWSL環境をマシンA、そのWSL環境をホストしている親のWindows環境をマシンBのように模した例。
# マシンA 側の WSL / Ubuntu の Git のバージョン git version 2.17.1 # マシンB 側の Git for Windows のバージョン git version 2.21.0.windows.1 # マシンAのWSL環境およびそのホストのマシンBのWindowのバージョン Microsoft Windows [Version 10.0.7763.437]
1. マシンAでGPG鍵ペアーを作る
WSL ならその中の任意のシェル、環境で。
# つくる gpg --gen-key
# 作った鍵の確認 gpg --list-keys
あとは Git や GitHub 用のおまけ。
# Git で GPG 署名を標準で有効に設定 git config --global commit.gpgsign true # 未設定だったり必要なら email とか signingkey の設定とか git config --global user.email somebody@example.com ## 実際は X じゃなくて作成時のログや gpg --list-keys で公開鍵を確認して設定 git config --global user.signingkey XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# GitHub に登録したりする用の公開鍵のテキストのエクスポート gpg --armor --export somebody@example.com
2. マシンAでGPG鍵ペアーをエクスポート
# 公開鍵をカレントディレクトリーの public.key ファイルへ gpg -o public.key --export somebody@example.com # 秘密鍵をカレントディレクトリーの secret.key ファイルへ gpg -o secret.key --export-secret-keys somebody@example.com
3. マシンBでGPG鍵ペアーをインポート
WSLをホストしている親のWindows環境での Git での使用なら Git for Windows を入れて Git Bash から。
# カレントディレクトリーの public.key から公開鍵をインポート gpg --import public.key # カレントディレクトリーの secret.key から秘密鍵をインポート gpg --import --allow-secret-key-import secret.key
# インポートした公開鍵は信用(trust)値が不明(unknown)になっているので自分で作った場合の ultimate 信用にしておく # gpg の対話モードで sign コマンドから 5 = I trust ultimately する gpg --edit-key somebody@example.com gpg> sign
このあと、マシンA同様に Git で使用可能に git config
を必要に応じて叩いておく。
おまけ、適当に Git の repos を作って動作確認。
mkdir hoge cd hoge echo hoge > hoge.txt git init # Git の設定が足りてなかったり GPG 鍵ペアーをちゃんとインポートできてないと失敗するかもしれない git commit -m hoge # 期待動作できていれば GPG 署名に関するメッセージが追加されてコミット・ログが出力される git log --show-signature
おまけ、 cmd
で叩かれる git
がどこの git
か確認したいとき:
# Linux 一般で `which git` に相当する Windows の cmd での操作 where git
おまけ、ここまでやった上で VSCode の Git 統合機能でも GPG 署名を有効化する設定(Preferences):
"git.enableCommitSigning": true
設定したら動作試験用の repos に VSCode からもコミットして、署名が付いているか確認する。確認は VSCode では素ではできないので、拡張なり、 Git Bash なり、何かしらでログを見て行う。
期待動作していれば Git Bash ではこんなログを見られる(このスクリーンショットは somebody@example.com じゃなくて実際にわたしの公開鍵がついている例だけど):