GitHubにSSH接続出来るようにする

2020.12.22
GitHubにSSH接続出来るようにする

GitHubとSSHでやり取り出来るようにします。

だいたいタイミングとしてはMacを新調した時など中々やる機会も少ないため備考録も兼ねて記載します。

大まかな流れ

まずザックリやることを書きます。
やった事がある人であればこれだけ見れば出来る気がします。



不安な方はプラスで以下のGitHub公式ページも併用しながら。

新しい SSH キーを生成して ssh-agent に追加する - GitHub Docs




ちなみにGitHubでは以下の作り方を推奨しているようです(ed25519初めて聞いた..)

  • 対応していれば 署名アルゴリズムに ed25519 を使う
  • 鍵作成時に -C でメールアドレスを入力(多分これはどっちでも良さそう)
  • パスフレーズを入力する

SSH 用の鍵を作成する際、従来は RSA を利用するケースがとても多かったと思います。 ですが、ED25519 の方が RSA よりも強度が高く、しかも速いです。 ED25519 に対応していない古い SSH の実装が無い限り、今後は ED25519 を利用した方が良さそうです。

SSH は (RSA 鍵より) ED25519 鍵の方が強固で速い - らくがきちょうより引用



パスフレーズ入力しないと手順が減って楽なんですが、
まずないと思いますがもし秘密鍵が漏れてしまったとしてもパスフレーズがバレなければ利用されない、という利点があります。


やってみて分かったのですがパスフレーズ入力してもそんなにやる事の手間増えません


なので、パスフレーズ入力するやり方おすすめです。

1. 秘密鍵/公開鍵の作成

署名に ed25519 を使うのとパスフレーズを入力するのがポイント。

# 鍵用のフォルダに移動
$ cd ~/.ssh

# 鍵を作成
# -t で暗号化方法を設定(公式を見ると rsa ではなく ed25519 を推奨)
# -C はコメント、なくても問題ないはず。ただしこれもGitHub公式のやり方に書いてある
# -f で作成するファイル名を指定。複数鍵を管理する必要がない場合は付けなくて問題ないです
$ ssh-keygen -t ed25519 -C "your_email@example.com" -f id_ed25519_github
# rsaの場合
# ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f id_rsa_github
・・・
Enter passphrase (empty for no passphrase): #パスフレーズを入力
Enter same passphrase again: #上記で入力した値をもう1度入力
・・・

2. GitHubに公開鍵登録

GitHub > Settings > SSH Keys > New SSH Key ボタン押下

  • Title・・自分が識別しやすい好きなタイトル
  • Key・・ pbcopy < ~/.ssh/id_ed25519_github.pub のようにしてコピーした公開鍵の内容

3. Macの鍵周りの設定

configを作成する

$ vim ~/.ssh/config でconfigファイルを編集(なければ新規作成)

~/.ssh/config
Host github
  HostName github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519_github  #作成した秘密鍵のファイル名

キーにパスフレーズを追加しない場合は UseKeychain 行を省略



合わせてconfigの権限を変更

$ chmod 600 ~/.ssh/config

秘密鍵をssh-agentに登録、パスフレーズをキーチェーンに保存する

ssh-agentをバックグラウンドで動作させる

$ eval "$(ssh-agent -s)"
Agent pid 2348 #このように表示されればOK!



パスフレーズをキーチェーンに保存

$ ssh-add -K ~/.ssh/id_ed25519_github
Enter passphrase for /Users/yuu/.ssh/id_ed25519_github: #パスフレーズを入力
Identity added: /Users/yuu/.ssh/id_ed25519_github (yuki.takara@gmail.com)

4. 接続出来る事を確認

最後に Hi xxx(GitHubのアカウント名)!と表示されればOKです!

$ ssh -T git@github.com
The authenticity of host 'github.com (13.114.40.48)' can't be established.
・・
Are you sure you want to continue connecting (yes/no/[fingerprint])? #yesを入力
・・
Hi yuki-takara! You've successfully authenticated, but GitHub does not provide shell access.

GitHubにSSHで接続出来るようにする手順(詳細)

以下ここまでの詳しいやり方、詳細になります。

1. 秘密鍵/公開鍵の作成

秘密鍵/公開鍵のペアを作成します。


~/.ssh フォルダ内に作成するのが一般的なため ~/.ssh に作成します。

もし ~/.ssh フォルダがない場合はフォルダの作成から

$ cd ~/.ssh
cd: no such file or directory: /Users/yuu/.ssh

# ~/.sshフォルダがない場合は作成する
$ mkdir ~/.ssh




ssh-keygen コマンドを使い鍵のペアを作成します。


鍵を作成する際に電子署名として RSA を用いる事が一般的だった認識なんですが、今は ed25519(エドワーズ曲線デジタル署名アルゴリズム) というのを使えるのであれば使うのですね。。


ed25519はRSAより強度も高く速いんですって。そりゃそういう流れになりますな。

SSH 用の鍵を作成する際、従来は RSA を利用するケースがとても多かったと思います。 ですが、ED25519 の方が RSA よりも強度が高く、しかも速いです。 ED25519 に対応していない古い SSH の実装が無い限り、今後は ED25519 を利用した方が良さそうです。

SSH は (RSA 鍵より) ED25519 鍵の方が強固で速い - らくがきちょうより引用



またパスフレーズを入力する方法をGitHub公式のやり方ではとっています

前述したようにパスフレーズ入力しないと手順が減って楽なんですが、
もし秘密鍵が漏れてしまったとしてもパスフレーズがバレなければ利用されない、という利点があります。


やってみて分かったのですがパスフレーズを入力してもそこまで手間増えないので、

パスフレーズ入力するやり方おすすめです。

# 鍵用のフォルダに移動
$ cd ~/.ssh

# 鍵を作成
# -t で暗号化方法を設定(公式を見ると rsa ではなく ed25519 を推奨)
# -C はコメント、なくても問題ないはず。ただしこれもGitHub公式のやり方に書いてある
# -f で作成するファイル名を指定。私のように複数鍵を管理する必要がない場合以外付けなくて問題ないです
$ ssh-keygen -t ed25519 -C "hoge@fuga.com" -f id_ed25519_github
・・・
Enter passphrase (empty for no passphrase): #パスフレーズを入力
Enter same passphrase again: #上記で入力した値をもう1度入力
・・・

2. GitHubに公開鍵登録

GitHub > Settings > SSH and GPG Keys > New SSH Key ボタン押下






SSH Keyを登録する画面が出てくるので公開鍵を登録します。

  • Title・・自分が識別しやすい好きなタイトル
  • Key・・ pbcopy < ~/.ssh/id_ed25519_github.pub のようにしてコピーした公開鍵の内容

3. Macの鍵周りの設定

configを作成する

SSHで接続する際のconfigファイルを設定します。


~/.ssh/config を作成し以下のように記述

~/.ssh/config
Host github
  HostName github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519_github  #作成した秘密鍵のファイル名

これでGitHubにSSH接続する際に作成した公開鍵を使って接続してくれます。



合わせてconfigの権限を修正します

$ chmod 600 ~/.ssh/config



秘密鍵をssh-agentに登録、パスフレーズをキーチェーンに保存する

秘密鍵をssh-agentに登録 & パスフレーズをキーチェーンに保存します。

これによってGitHubにSSH接続する際にパスフレーズ聞かれなくなります


ssh-agentをバックグラウンドで動作させます

$ eval "$(ssh-agent -s)"
Agent pid 2348 #このように表示されればOK!



パスフレーズをキーチェーンに保存します

$ ssh-add -K ~/.ssh/id_ed25519_github
Enter passphrase for /Users/yuu/.ssh/id_ed25519_github: #パスフレーズを入力
Identity added: /Users/yuu/.ssh/id_ed25519_github (yuki.takara@gmail.com)



4. 接続出来る事を確認

最後にGitHubとSSHで接続出来る事を確認します。

ssh コマンドを使って最終的に Hi xxx(GitHubのアカウント名)!と表示されればOKです!

$ ssh -T git@github.com
The authenticity of host 'github.com (13.114.40.48)' can't be established.
・・
Are you sure you want to continue connecting (yes/no/[fingerprint])? #yesを入力
・・
Hi yuki-takara! You've successfully authenticated, but GitHub does not provide shell access.

おすすめ