個人のプライベートリポジトリだとあまり問題になりませんが、最近の Github は悪意のある偽装アカウントの PR、捨てアカウントによる悪意のあるコード混入など、セキュリティ的な問題が色々存在します。
そこで、GPG 鍵を設定し、Verified
したコミットを行うこともパブリックでは 1 つのマナー化しつつあります。
そんな GPG Key の設定方法についての方法を記載します
Linux で HTTPS での Git 操作を行う
…という前に Windows では Git Credential Manager for Windows が Git インストール時に基本的に付属しているため、 Github からのクローンやプッシュはそんなに大変なことではありません。Windows の資格情報に書き込んでしまえば、大抵のことはできます
が、Linux は少し面倒です(SSH オンリー対応なら楽ですが)
認証の方法は OAuth など色々な方法があるのですが、私は git-credential-manager とpass
を利用する方法を採用しています。
pass
は Linux で使えるパスワードマネージャーです。これならばターミナル上だけで操作する場合、完結が可能です
pass
は Homebrew などでインストールできます
brew install pass
git-credential-manager
は Github のマニュアルのまま取得すれば良いです。Ubuntu の場合を示します
wget https://github.com/GitCredentialManager/git-credential-manager/releases/download/xxxx.deb
sudo dpkg -i xxxxxxx.deb
git-credential-manager-core configure
これで.gitconfig
が書き換えられていることが確認できます
ただし、ここからCredential Store
の設定が必要になります
git config --global credential.credentialStore gpg
更に、Linux の場合GPG_TTY
を環境変数に設定しないと怒られます。その為、シェルの環境変数に設定しなければなりません。fish
を端末にしている場合を以下に示します
set GPG_TTY (tty)
pass
を使うに当たっては、gpg-id というものが必要になります。これはgpg
コマンドで確認します
gpg --list-keys
確認後、pass
のデータベースを初期化します
pass init XXXXXXXXX
あとは Github でパーソナルトークンを発行し、適当なリポジトリをgit clone
します
デバイス認証とトークンどっち使うか聞かれるので、トークンを選択すれば、期限まで有効となります
Github の GPG 鍵の設定
さて、いよいよ本題ですが、GPG 鍵の発行方法です
これはgpg
コマンドが使えれば、大体終わりです。Windows でも Linux でもどちらも同じです
Windowsの場合、GPG4Winというツールにより、Kleopatraというアプリで管理できます
次のコマンドで、RSA や 4096 ビットを選択した GPG キーを作成し、Github に公開鍵を貼り付ければ OK です。
メールアドレスなどは.gitconfig
と合わせておきます。
つまり、一般的にはxxxxx+username@users.noreply.github.com
がアドレスになります
gpg --full-gen-key
gpg --list-keys
gpg -a --export XXXXXXX
そして、.gitconfig
も色々登録しておきます
git config --global gpg.program gpg # Windowsの場合フルパス
git config --global user.signingkey XXXXXX
git config --global commit.gpgsign true
git config --global tag.gpgsign true
ここまで来れば、大体 OK といった形です
GPG 鍵を複数デバイスで共有する
鍵を複数デバイスで共有し、コミットできるようにしたい場合があります
または、端末を引っ越しするようなケースです
その場合、以下のようにします
# 端末1
gpg -a --export-secret-key <gpg-id> > private.key
# 端末2
gpg --import private.key
gpg --edit-key <gpg-id>
gpg> trust # 5を選択