GitHubのSSH Keys & GPG Keysの登録
なにをしたいのか
私の持っている
- Macbook Pro
- iPad Air
- Black Shark 4
でGitHubにSSH接続と、署名を行いたいです。SSHに関してはい言わずもがなという感じですが、署名はそのユーザー本人がCommitしたことを証明してくれます。Verifiedと表示されて、気分がよくなります(そういうメリットじゃない)
Mac
MacBook Pro (13-inch, 2017, Thunderbolt 3ポートx 2)
% brew install gnupg
% gpg --version
gpg (GnuPG) 2.3.7
libgcrypt 1.10.1
% ssh -V
OpenSSH_8.6p1, LibreSSL 3.3.6
とりあえずGPGとOpenSSHをインストールします。Macには標準でOpenSSHがインストールされているみたいです。SSH KeyにもGPG Keyにもメールアドレスを使うんですが、今回はGitHubが生成してくれるものを使うことにしました。
SSH鍵の作成
公式のドキュメントを参考にやってみます。
% mkdir .ssh
% ssh-keygen -t ed25519 -C "mail"
Enter file in which to save the key (/Users/x/.ssh/id_ed25519): /Users/x/.ssh/hoge
...
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...
Your identification has been saved in /Users/x/.ssh/hoge
Your public key has been saved in /Users/x/.ssh/hoge.pub
多少省略しましたが、こんな感じですね。面倒なのでパスフレーズは設定しません。設定したければ入力すればできます。ただし、接続の際に毎度パスフレーズの入力が要求されます(調べてませんが、細かい設定もできるみたいです)。hogeのところは好きなものに置き換えてください。github_keyとか分かりやすいものでいいんじゃないでしょうか。
SSH鍵の登録
% pbcopy < ~/.ssh/hoge.pub
クリップボードに公開鍵をコピーします。
pbcopyがなければ、`cat ~/.ssh/hoge'で表示されたものをコピーします
あとは、SSH Keyのほうに貼り付けるだけです。改行やスペースが入っているとダメみたいです。
configの作成
% touch ~/.ssh/config
% nvim ~/.ssh/config
configというファイルを作って以下を書き込みます。
Host github github.com
HostName github.com
User git
IdentityFile ~/.ssh/hoge
AddKeysToAgent yes
UseKeychain yes
別にvimは使わなくてもいいです。お好きなエディタを使用されたらいいと思います。
接続テスト
% ssh -T github
Are you sure you want to continue connecting (yes/no/[fingerprint])?
のような警告(?)が表示されますが、気にせずyesと入力します。最終的にHi @user! You've successfully authenticated, but GitHub does not provide shell access.
という文章が表示されてればSSHでの接続はOKです。
一度でも使用されれば、このように緑の表示になるみたいです。(ssh -T github
ではならない)
GPG鍵の作成
% gpg --full-generate-key
ご希望の鍵の種類を選択してください:
...
(10) ECC (署名のみ)
...
あなたの選択は? 10
...
これで正しいですか? (y/N) y
鍵の種類はECCの署名のみを選択して、後はデフォルトです。
% gpg --list-secret-keys --keyid-format=long
...
sec ed25519/a 2022-07-29 [SC]
b
uid [ 究極 ] name <mail>
今回はSubKeyで署名を行います。sec ed25519/a 2022-07-29 [SC]
という行のaにあたる部分をコピーします。
SubKeyの作成
% gpg --edit-key a
> addkey
ご希望の鍵の種類を選択してください:
...
(10) ECC (署名のみ)
...
あなたの選択は? 10
...
これで正しいですか? (y/N) y
本当に作成しますか? (y/N) y
> save
% gpg --list-secret-keys --keyid-format=long
...
sec ed25519/a 2022-07-29 [SC]
b
uid [ 究極 ] name <mail>
ssb ed25519/c 2022-07-29 [S]
確認すると、しっかりとSubKeyが作成できています。次は鍵を登録しますが、sec ed25519/a 2022-07-29 [SC]
という行のaにあたる部分をコピーします。
GPG鍵の登録
% gpg --armor --export a
-----BEGIN PGP PUBLIC KEY BLOCK-----
...
-----END PGP PUBLIC KEY BLOCK-----
出力された全てをコピーします。-----BEGIN PGP PUBLIC KEY BLOCK-----
〜 -----END PGP PUBLIC KEY BLOCK-----
までですね。
署名の設定
% git config --global commit.gpgsign true
% git config --global user.signingkey c
% git config --global user.name name
% git config --global user.email mail
さっき使った名前とメールアドレスを設定します。
% git commit -S -m "message"
自動で署名してくれなかった場合は、-S
オプションを使用するとできます。
下がオプションを使用しない、上がオプションを使用したものです。署名をすると、名前ではなくユーザーIDに置き換わるようです。
Termux
Black Shark 4 Specs - Gaming Smartphone
> pkg upgrade
> pkg install git
> pkg install openssh
> pkg install gnupgsh
> gpg --version
gpg (GnuPG) 2.3.7
libgcrypt 1.10.1
> ssh -V
OpenSSH_9.0p1, OpenSSL 3.0.3 3 May 2022
AndroidのTermuxというアプリです。他の端末より先に使っていたので、環境構築がすこし進んでます。
SSHの相違点
UseKeychainの設定が使えないみたいです。GitHubの公式では、IgnoreUnknown UseKeychain
を記述するよう書かれていましたが、消してもいけました(問題なければ記述した方がいいと思います)。ちなみに、IgnoreUnknownを記述するとき、UseKeychainより上に記述する必要があります。
GPGの相違点
gpg --batch --passphrase='' --quick-gen-key "name <mail>" ed25519 sign none
対話モードではパスフレーズなしで登録できないようなので、--batch
オプションを使いました。subkeyは作りませんでした。あとは同じです。パスフレーズが必要ならば、--passphrase=''
の部分を変更します。
iSH
# pkg update
# pkg upgrade
# pkg add git
# pkg add gnupg
# pkg add openssh
# gpg --version
gpg (GnuPG) 2.2.31
libgcrypt 1.9.4
# ssh -V
OpenSSH_8.6p1, OpenSSL 1.1.1q 5 Jul 2022
iOS(iPadOS)のiSHというアプリです。なんか崩れてますねw
SSHの相違点
Termuxと同じです。
GPGの相違点
Termuxと同じです。
より強いセキュリティ
私はパスフレーズを設定していませんが、本来は設定した方が良いです。ただし、短いものはあまり意味がないです(総当たりでヒットする可能性が高い)。目安としては12文字以上といったところでしょうか。心に余裕がある方は設定してみるといいと思います。
最後に
何か指摘やアドバイス、その他諸々があれば、Discussionか、twitterまでお願いします。
Discussion