GitHubにssh接続するためには公開鍵と秘密鍵を生成し、GitHubに登録することが必要となったので、その手順をまとめた備忘録になります。
公開鍵・秘密鍵を作成する
鍵を入れるフォルダに移動します。
$cd ~/.ssh
はじめて鍵を生成するときは何も入っていないはずです。僕は一度作成済みなので、次のコマンドで鍵を生成します。セキュリティを考えて、暗号化強度を強く暗号化強度を4096にして作成しています。
-C
のコメント部分を入れ替えて、以下のコマンドを実行。
※GitHubに登録しているEmailアドレスを使うのが一般的のようです。
$ ssh-keygen -t rsa -b 4096 -C "hogehoge@fuga.com"
//-t 暗号化方式を指定
//-b 暗号化強度を指定
//-C コメントを設定
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ts/.ssh/id_rsa): /Users/ts/.ssh/id_rsa_github //秘密鍵の名前を指定
Enter passphrase (empty for no passphrase): //パスワードを入力
Enter same passphrase again: //もう一度入力
Your identification has been saved in id_rsa_github. //秘密鍵
Your public key has been saved in id_rsa_github.pub. //公開鍵
何か聞かれたら何も入力せず3回エンターを押せば、id_rsaとid_rsa.pubの2つの鍵が生成されますが、すでに同パスにid_rsaとid_rsa.pubがある場合、上書きされてしまうので、1回目で鍵の名前を指定するようにしましょう。
なお、2回目、3回目はパスフレーズの設定(パスワード設定のようなもの)ですが、ここはなくて一応OKみたいですが、僕は設定しておきました。設定したら忘れないようにメモしておきましょう。(僕は忘れて設定し直しました^^;)
ちなみに、パスフレーズを忘れた場合は、既存のid_rsa_githubとid_rsa_github.pubを削除し、また新しく設定し直しましょう。既にGitHub等とssh接続している場合は、そちらも変更しておきましょう。
現在使用している鍵の暗号強度の確認
以下のコマンドにて鍵長が2048以上かつ暗号化方式がRSA、或いはECDSAやEd25519であればOK
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
4096 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com (RSA)
作成できたファイルを確認
$ ls
config id_rsa_github.pub //右が公開鍵
id_rsa_github known_hosts //左が秘密鍵
GitHubに公開鍵を設定する
https://github.com/settings/ssh
で公開鍵の設定が出来ます。(GitHubに登録していることが前提条件です)
画面右上の「New SSH key」のボタンを押します。
「Title」にわかりやすい任意に名前、「Key」に公開鍵の中身を入れます。入力したら「Add SSH key」で パスワード入力が求められるので入力する。

なお、鍵の中身のクリップボードへのコピーは以下でできる。(※鍵の名前は自分の作成したもの)
$ pbcopy < ~/.ssh/id_rsa_github.pub
接続を確かめる
$ ssh -T git@github.com
で返ってきたら接続完了です!
Hi (account名)! You’ve successfully authenticated, but GitHub does not provide shell access.
しかし…鍵を作るときに名前を指定していれば、うまくいかないかもしれません。それは、ssh接続の際「~/.ssh/id_rsa」、「~/.ssh/id_dsa」、「~/.ssh/identity」しかデフォルトでは見にいかないからです。
それに対応するためには~/.ssh/configを作成します。
config設定
$ vim ~/.ssh/config
権限を修正する
$ chmod 600 ~/.ssh/config
configに下記を追記
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
IdentitiesOnly yes
秘密鍵をssh-agentに登録する
//ssh-agentが動作しているか確認
$ eval "$(ssh-agent -s)"
Agent pid 10203
//動いていることが確認できました。
//登録したい鍵を指定
$ ssh-add -K ~/.ssh/id_rsa_github
Enter passphrase for /Users/ユーザー名/.ssh/id_rsa_github: # 鍵のpassword入力
Identity added: /Users/ユーザー名/.ssh/id_rsa_github (~/.ssh/id_rsa_github)
//ちなみに-K のオプションを指定することでターミナルを再起動しても消えなくなる
秘密鍵の削除
//特定の鍵の削除
$ ssh-add -d ~/.ssh/<削除したい鍵>
//ALL削除
$ ssh-add -D
接続確認
接続確認をしてみる。
下記のように出れば、接続完了です!
$ ssh -T git@github.com
Hi (アカウント名)! You've successfully authenticated, but GitHub does not provide shell access.
//ちなみにssh -T githubでもOK
これでGitHubにgit@
でアクセスできるようになります。お疲れ様でした。m(_ _)m
※ なお、リポジトリで使用する場合、Gitのリモートリポジトリをhttpsに切り替えている場合はリモートリポジトリのURLを切り替える必要があるので注意。以下参照
既存のリモートリポジトリURLを変更する方法
GitHubと実際にやりとりするときにID・パスワードを聞かれるときssh接続がうまくいっていません。レポジトリのディレクトリに入り
$ git config remote.origin.url
で確認し https://github.com/[ユーザID]/[リポジトリ]
となっていたら
$ git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git
とする。/~/.ssh/config
で設定している場合は
$ git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
とする。[Host名]とは~/.ssh/config
の一行目のHostの名前(ここではgithub)のことです。
公式ドキュメント:https://docs.github.com/ja/github/using-git/changing-a-remotes-url