目次
確認環境
Windows
Env | Ver |
---|---|
Windows 10 Pro | Build 19042.804 |
git | 2.30.0.windows.1 |
VSCode | 1.53.2 |
Kleopatra | Gpg4win-3.1.15 |
Linux
Windows 側から VSCode の Remote - SSH で接続
Env | Ver |
---|---|
Ubuntu Desktop | 20.04.2 |
git | 2.25.1 |
gpg | 2.2.19 |
Kleopatra | Gpg4win-3.1.15 |
手順
Windows
- Kleopatora を起動
- ファイル> New Pair Key
- 個人用の OpenPGP 鍵ペアを生成
- 期限なし、パスフレーズは適当に
- Export から
-----BEGIN PGP PUBLIC KEY BLOCK-----
の中身を全部 GitHub のGPG keys/ Add new
に貼り付ける - 追加後にでてきた
Key ID
をgit config --global user.signingkey KeyID
としてcmd
に流す - 更に
git config --global commit.gpgsign true
を流す - 管理者権限で
cmd
を起動し次のシンボリックリンクを作成mklink /D %USERPROFILE%\.gnupg %AppData%\GnuPG
- VSCode で適当なリポジトリを作成
- なんか適当にコミットする
- GitHub に投げる
- GitHub のコミット履歴に verified signature がついてたら成功
Linux
- Windows 側の Kleopatora から公開鍵と秘密鍵をエクスポートして持ってくる
gpg --import FooBarpublic.asc
で公開鍵をインポートgpg -k
でインポートされていることを確認し、下記XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
相当の部分をコピペ
pub rsa3072 2021-01-17 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ 不明 ] Foo Bar <foobar@example.com>
sub rsa3072 2021-01-17 [E]
gpg --edit-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
trust
5
を選ぶquit
gpg -k
で信用度が[ 究極 ]
になっていることを確認gpg --import FooBarSECRET.asc
で秘密鍵をインポート- SSH で繋いでいる時でタイムアウトする場合、GUI プロンプトからの入力になっている可能性があるので、どうにかして入力
- XRDP 経由なら
pkill gnome-session
を叩くと入れる
- Windows の時と同様に次のコマンドを流す
git config --global user.signingkey KeyID
git config --global commit.gpgsign true
- VSCode で適当なリポジトリを作成
- 何か適当にコミットする
- コミットがコケたら XRDP から入力する
- GitHub に投げる
- GitHub のコミット履歴に verified signature がついてたら成功
CLI からどうしてもやりたい場合
- gpg-agent のセッションが切れる度に生のパスフレーズを打つ羽目になるので微妙
- gpg-agent が落ちると切れるので OS 再起動とかすると打ち直し
- 次のコマンドを流す
# .profileは必要に応じて変更、zsh なら .zshrc
cat <<'EOF' | tee -a .profile > /dev/null
# GPG TTY
export GPG_TTY=$(tty)
EOF
cat <<EOF > ~/.gnupg/gpg-agent.conf
# cache passphrase for 1 years
allow-preset-passphrase
default-cache-ttl 31536000
max-cache-ttl 31536000
EOF
- パスフレーズを記憶させるために
echo パスフレーズ | /usr/lib/gnupg/gpg-preset-passphrase --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
を叩く- 毎回手打ちするのであれば不要
- 自動化しようとすると生の PW がどこかに眠ることになるので、それはそれで微妙