MacからGitHubにsshで接続する手順
ずっとUbuntuでGitHubを操作していたのですが、iMacからも操作できるように設定しました。メモとして残しています。
環境は"macOS Big Sur 11.6"です。
公式ページの方法で進めます。
Gitをインストール
すでにGitはインストールされていましたが古いのでバージョンアップします。
$ git --version
git version 2.30.1 (Apple Git-130)
Git公式ページにあるようにHomebrewでインストールすることにしました。
まずHomebrewを公式ページにしたがってインストールします。
ターミナルを開いて公式にあるコマンドを実行します。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
==> Checking for `sudo` access (which may request your password).
Password: [ここでパスワードを入力します]
・・・略・・・
==> Installation successful!
・・・略・・・
インストールが成功したようなので、バージョンを確認します。
$ brew --version
Homebrew 3.2.16
Homebrew/homebrew-core (git revision 0132f3f7f21; last commit 2021-10-16)
Git公式にあるようにHomebrewコマンドでGitをインストールします。
$ brew install git
Gitのバージョンを確認してみると、以前のままです。
$ git --version
git version 2.30.1 (Apple Git-130)
パスは設定されているようだったので再起動したら反映されたらしく、正しく実行されるようになりました。
# パッケージのバージョンを確認すると最新の'2.33.1'
$ brew info git
git: stable 2.33.1 (bottled), HEAD
Distributed revision control system
https://git-scm.com
/usr/local/Cellar/git/2.33.1 (1,513 files, 42.1MB) *
Poured from bottle on 2021-10-16 at 22:27:12
・・・略・・・
# Gitのインストール先は'/usr/local/Cellar/git/2.33.1/bin/git'
$ brew ls git
/usr/local/Cellar/git/2.33.1/.bottle/etc/gitconfig
/usr/local/Cellar/git/2.33.1/bin/git
/usr/local/Cellar/git/2.33.1/bin/git-cvsserver
/usr/local/Cellar/git/2.33.1/bin/git-receive-pack
/usr/local/Cellar/git/2.33.1/bin/git-shell
/usr/local/Cellar/git/2.33.1/bin/git-upload-archive
/usr/local/Cellar/git/2.33.1/bin/git-upload-pack
・・・略・・・
# brewでインストールしたGitは'/usr/local/bin'からシンボリックリンクで参照されている
$ ls -al /usr/local/bin | grep git
lrwxr-xr-x 1 username admin 28 10 16 22:27 git -> ../Cellar/git/2.33.1/bin/git
lrwxr-xr-x 1 username admin 38 10 16 22:27 git-cvsserver -> ../Cellar/git/2.33.1/bin/git-cvsserver
lrwxr-xr-x 1 username admin 41 10 16 22:27 git-receive-pack -> ../Cellar/git/2.33.1/bin/git-receive-pack
lrwxr-xr-x 1 username admin 34 10 16 22:27 git-shell -> ../Cellar/git/2.33.1/bin/git-shell
lrwxr-xr-x 1 username admin 43 10 16 22:27 git-upload-archive -> ../Cellar/git/2.33.1/bin/git-upload-archive
lrwxr-xr-x 1 username admin 40 10 16 22:27 git-upload-pack -> ../Cellar/git/2.33.1/bin/git-upload-pack
# パスで'/usr/local/bin'が定義されている
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
再起動して再びバージョン確認しました。
$ git --version
git version 2.33.1
# 場所の確認
$ which git
/usr/local/bin/git
Gitにユーザ名とメールアドレスを設定していない場合は、設定しておきます。
$ git config --global user.name "hn-carter-mac"
$ git config --global user.email "01234567+hn-carter@users.noreply.github.com"
GUIツールもインストールします。
$ brew install git-gui
GitHub CLIをインストール
“GitHub CLI"はターミナルからGitHubを操作するツールです。Homebrewでインストールする事ができます。
$ brew install gh
インストールされたバージョンを確認します。
$ gh --version
gh version 2.1.0 (2021-10-14)
https://github.com/cli/cli/releases/tag/v2.1.0
SSH鍵の作成
素直に公式ページを参考に操作しました。
まず、GitHubに接続するためのSSH鍵を作成します。
$ ssh-keygen -t ed25519 -C "01234567+hn-carter@users.noreply.github.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
Created directory '/Users/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/username/.ssh/id_ed25519.
Your public key has been saved in /Users/username/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:x3AXeWxJBxUxFxnxvXDxnx1XiX4x7xsXVXlXixfXEX4 01234567+hn-carter@users.noreply.github.com
The key's randomart image is:
+--[ED25519 256]--+
| .o+==....|
| . =..++= o |
| o.*o= * |
| B . = + = = |
| S = o B |
| . + B o B |
| o . + + |
| = .B=+. o |
| .=oE .|
+----[SHA256]-----+
# 作成したSSH鍵ファイル
$ ls -al ~/.ssh
total 16
drwx------ 4 username staff 128 10 17 23:40 .
drwxr-xr-x+ 22 username staff 704 10 17 23:40 ..
-rw------- 1 username staff 484 10 17 23:40 id_ed25519 <= 秘密鍵ファイル
-rw-r--r-- 1 username staff 125 10 17 23:40 id_ed25519.pub <= 公開鍵ファイル
次に、作成したSSH鍵をssh-agentに登録します。
# ssh-agentをバックグラウンド起動
$ eval "$(ssh-agent -s)"
Agent pid 844
パスフレーズを登録する設定をconfigファイルに書き込みます。
# touchコマンドでファイルを新規作成し
$ touch ~/.ssh/config
# Macのopenコマンドでファイルを開きます
$ open ~/.ssh/config
エディタが表示されるので以下の内容を入力します。
Host *
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
# SSH秘密鍵をssh-agentに追加します
$ ssh-add -K ~/.ssh/id_ed25519
Enter passphrase for /Users/username/.ssh/id_ed25519: [パスフレーズを入力]
Identity added: /Users/username/.ssh/id_ed25519 (01234567+hn-carter@users.noreply.github.com)
# 追加されているSSH鍵を確認できます
$ ssh-add -l
256 SHA256:X3AXeWxJBxUrXwxmxMXoxbXWxRXpXr7OXN8Vxrx7EX4 01234567+hn-carter@users.noreply.github.com (ED25519)
SSH鍵をGitHubに登録
GitHub CLIで接続設定を行います。gh auth login
コマンドを実行するといくつか質問されますが以下のように解答しました。
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? SSH
? Upload your SSH public key to your GitHub account? /Users/username/.ssh/id_ed25519.pub
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: ABCD-1234 <= ワンタイムコードが表示される
- Press Enter to open github.com in your browser...
ここでEnterキーを押すとwebブラウザが開きます。
ユーザ名とパスワードを入力します。
この画面でターミナルに表示されたワンタイムコードを入力します。
権限の確認画面が表示されたら’Authorize github’ボタンをクリックします。
設定完了画面が表示されます。
ここでターミナルに戻り、エンターキーを押すとGitHubにログインされます。
✓ Authentication complete. Press Enter to continue...
- gh config set -h github.com git_protocol ssh
✓ Configured git protocol
✓ Uploaded the SSH key to your GitHub account: /Users/username/.ssh/id_ed25519.pub
✓ Logged in as hn-carter
GitHubの認証状況を確認するとログインできていることが分かります。
$ gh auth status
github.com
✓ Logged in to github.com as hn-carter (/Users/username/.config/gh/hosts.yml)
✓ Git operations for github.com configured to use ssh protocol.
✓ Token: *******************
GitHubに登録されている鍵の一覧を表示してみます。‘Ubuntu-VM’は以前に登録済みの鍵で、‘GitHub CLI’が今回追加したカギになります。 鍵のタイトルがいつの間にか’GitHub CLI’になってるのでGitHubのwebサイトから鍵の追加をした方が良かった?
$ gh ssh-key list
Ubuntu-VM ssh-ed25519 ADBAC3XzxC5lIDX1CTE5BAAEIB1D8S08NUj8j9w8vxy78wx4IR281Zj9A587w+wrN=G5 May 28, 2021
GitHub CLI ssh-ed25519 ABADC3XzxC9lZXI1NTX5ADAAGEFskGTcLHX3BS/zuTDduOXfkmGy8029tjrH56uyv+Sk 6m
GitHubへSSH接続できるか確認します。
$ ssh -T git@github.com
Hi hn-carter! You've successfully authenticated, but GitHub does not provide shell access.
以上で完了です。