🔏

GitHubのSSH Keys & GPG Keysの登録

2022/07/30に公開

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh
https://docs.github.com/ja/authentication/managing-commit-signature-verification/generating-a-new-gpg-key

なにをしたいのか

私の持っている

  • 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

https://alacritty.org/
とりあえずGPGとOpenSSHをインストールします。Macには標準でOpenSSHがインストールされているみたいです。SSH KeyにもGPG Keyにもメールアドレスを使うんですが、今回はGitHubが生成してくれるものを使うことにしました。

https://github.com/settings/emails

SSH鍵の作成

公式のドキュメントを参考にやってみます。

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'で表示されたものをコピーします

https://github.com/settings/keys

あとは、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-----までですね。

https://github.com/settings/keys

署名の設定

% 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

https://termux.dev/en/
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


iPad Air (第5世代)

# 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

https://ish.app/
iOS(iPadOS)のiSHというアプリです。なんか崩れてますねw

SSHの相違点

Termuxと同じです。

GPGの相違点

Termuxと同じです。

より強いセキュリティ

私はパスフレーズを設定していませんが、本来は設定した方が良いです。ただし、短いものはあまり意味がないです(総当たりでヒットする可能性が高い)。目安としては12文字以上といったところでしょうか。心に余裕がある方は設定してみるといいと思います。

最後に

何か指摘やアドバイス、その他諸々があれば、Discussionか、twitterまでお願いします。

GitHubで編集を提案

Discussion