GitHubとSSHでやり取り出来るようにします。
だいたいタイミングとしてはMacを新調した時など中々やる機会も少ないため備忘録も兼ねて記載します。
大まかな流れ
まずザックリやることを書きます。 やった事がある人であればこれだけ見れば出来る気がします。
不安な方はプラスで以下のGitHub公式ページも併用しながら。
新しい SSH キーを生成して ssh-agent に追加する - GitHub Docs
ちなみにGitHubでは以下の作り方を推奨しているようです(ed25519
初めて聞いた..)
- 対応していれば 署名アルゴリズムに
ed25519
を使う - 鍵作成時に
-C
でメールアドレスを入力(多分これはどっちでも良さそう) - パスフレーズを入力する
SSH 用の鍵を作成する際、従来は RSA を利用するケースがとても多かったと思います。 ですが、ED25519 の方が RSA よりも強度が高く、しかも速いです。 ED25519 に対応していない古い SSH の実装が無い限り、今後は 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ファイルを編集(なければ新規作成)
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 を利用した方が良さそうです。
またパスフレーズを入力する方法を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
を作成し以下のように記述
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.