GitHub に認証するため SSH キー(秘密鍵・公開鍵のペア)を生成して、「公開鍵」を GitHub 上に保存します( macOS には標準で OpenSSH の一式が入っています)
パスフレーズをキーチェーンアクセスに保存しておくと接続の都度入力する必要がなくなるので便利です
環境構築手順
1. SSH キーを生成する
キージェネレーターを起動
your_email@example.com をGitHubに登録しているメールアドレスに書き換えて実行
※ ed25519 は GitHub 推奨のアルゴリズム
% ssh-keygen -t ed25519 -C "your_email@example.com"
ファイル名を指定できるが、デフォルトでOKなのでそのまま Enter
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_ed25519):
パスフレーズを入力
後で使うので控えておく(万が一忘れてもキーチェーンアクセスから参照可)
Created directory '/Users/ユーザー名/.ssh'.
Enter passphrase for "/Users/ユーザー名/.ssh/id_ed25519" (empty for no passphrase):
パスフレーズを再入力
Enter same passphrase again:
キー生成完了
秘密鍵と公開鍵が出来る
キラキラしたアスキーアートが出るが、使わないので気にしないでOK
Your identification has been saved in /Users/ユーザー名/.ssh/id_ed25519
Your public key has been saved in /Users/ユーザー名/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:フィンガープリントデータ your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----[SHA256]-----+
2. config を書く
GitHub 公式の手順だと以下のように ssh-agent をバックグラウンド起動するよう書かれているが、ここで手動起動しなくても後で自動起動されるので不要
(というか手動起動すると mac を再起動するまで launchd 管理外になる)
$ eval "$(ssh-agent -s)"
ssh-keygen によってすでに ~/.ssh フォルダが作られているはず
% cd ~/.ssh
config ファイル作成
% touch ./config
テキストエディタで以下のように編集
Host github.com
AddKeysToAgent yes # 初回アクセス時に秘密鍵を ssh-agent に自動登録
UseKeychain yes # パスフレーズをキーチェーンアクセスに保存
IdentityFile ~/.ssh/id_ed25519
GitHub 公式の手順だと以下のように ssh-add を手動実行しているが、config に上記を設定していると秘密鍵やパスフレーズが ssh-agent に自動追加されるので不要
% ssh-add --apple-use-keychain ~/.ssh/id_ed25519
3. GitHub に公開鍵を設定する
Setting > SSH and GPG keys を開いて New SSH key ボタンをクリック
- Title: 任意(例:MacBook)
- Key type: Authentication Key
- Key:
id_ed25519.pub(公開鍵)の中身全部を貼る
※ 間違って「秘密鍵」を貼らないように注意!
4. 接続テスト
% ssh -T git@github.com
初回接続時は ~/.ssh/known_hosts がまだ存在しないので、信頼してよいか問われる → yes を入力し Enter
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is: SHA256:フィンガープリントデータ
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
初回のみ、パスフレーズを手入力する(キーチェーンアクセスに保存される)
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '/Users/ユーザー名/.ssh/id_ed25519':
「認証したけど、シェルアクセスは提供していない」旨の説明が返ってくる
また、このタイミングで GitHub のホスト鍵が ~/.ssh/known_hosts に登録される
Hi ユーザー名! You've successfully authenticated, but GitHub does not provide shell access.
パスフレーズはどこに保存されたか
Spotlight で キーチェーンアクセス.app を起動し右上の検索欄に ed25519 を入れてフィルタすると下記の名前が出てくる
SSH: /Users/ユーザー名/.ssh/id_ed25519
git も無事疎通成功!
% git pull
Already up to date.
仕組みの整理
ユーザー認証と鍵管理
macOS 起動時、launchd により ssh-agent と通信するための UNIX ソケットが作られる(パスが環境変数 $SSH_AUTH_SOCK にセットされる)
Git コマンド経由で ssh 接続しようとすると、ssh-agent がオンデマンド起動され、GitHub に認証依頼する(通信は事前に暗号化済)
起動確認方法
macOS 起動後、一度も ssh を使用していない時
まだ ssh-agent は起動していない
% launchctl list | grep ssh
- 0 com.openssh.ssh-agent
% ssh-add -l
The agent has no identities.
使用後
% launchctl list | grep ssh
1150 0 com.openssh.ssh-agent
% ssh-add -l
256 SHA256:フィンガープリントデータ your_email@example.com (ED25519)
アンインストール手順
- キーチェーンアクセスからパスフレーズを削除する
-
~/.sshフォルダを削除する(もしくは GitHub 用の鍵を削除) - GitHub から公開鍵を削除する