【GitHub】15分調べても分からない人のためのSSH接続セットアップ方法


自分でセットアップしたときに色んなサイトを行き来してしまい、効率が悪かったのでまとめてみました。
最下部に参考にさせて頂いた記事をまとめて記載してあります。
（非常に勉強になりました。ありがとうございます！）

おおむね、GitHub公式ヘルプページに沿った手順です。
誤り等あればご指摘頂けますと幸いです。

## 目的
### Git使用時の効率UP
SSH接続しなかった場合、GitHubに接続するたびにユーザー名・パスワードを入力する必要があり、効率が悪いです。

SSH接続をすれば、その入力の手間を省けるためスムーズにgitコマンドを使用できて効率UP!
## 前提条件
### 環境
- OS：  macOS Mojave version 10.14.6
- ターミナルのシェル：　zsh

### 自分のものに置き換えて欲しいもの
- メールアドレス： `your_email@example.com`
- パスワード： `your_password`
- ルートディレクトリ： `/Users/you/`
- GitHubユーザーネーム`your_username`
- Git管理するディレクトリ： `/Users/you/myproject/`

### 事前準備
- GitHubアカウントの取得


## 手順
1. 既存のSSHキーの確認（あれば「ssh-agentに追加する」へ移動）
2. 新しいSSHキーを生成してssh-agentに追加する
3. GitHubアカウントへの新しいSSHキーの追加
4. SSH接続をテストする

### 1. 既存のSSHキーの確認
-  ターミナルで既存のSSHキーが存在するかを確認する。
以下コマンドを入力。（$は入力不要）

```zsh
$ ls -al ~/.ssh
```
- 出力されたファイル一覧から、自分は公開SSHキーを持っているか確認する。
以下ファイルが出てくれば既に公開鍵を持っているということ。
	- id_dsa.pub
	- id_ecdsa.pub
	- id_ed25519.pub
	- id_rsa.pub（自分の場合はこれでした。GitHub使用者全体の９割以上はRSAらしいです。）
	
- 現在使用している鍵の暗号強度の確認
※公開鍵は`id_rsa.pub`として記載しています。

```zsh
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
```
出力が以下のように、鍵長が2048以上、かつ暗号化方式がRSA,ECDSA,Ed25519であればセキュリティ上問題ないそうです。

```zsh
2048 SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx your_email@example.com (RSA)
```

### 2. 新しいSSHキーを生成してssh-agentに追加する
#### （ない場合のみ）新しいSSHキーを生成する
- ターミナルを開く。
- 新しいSSHキーを生成する。

```zsh
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```

- 以下メッセージが表示されたら、Enter キーを押す。

```zsh
> Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
```

- 次に出るパスフレーズは入力推奨
無視してEnterでもいいと書いている記事もありましたが、GitHubは入力を推奨しています。

任意のパスフレーズを決め、入力してEnter。
何も入力せずEnterを押すと、パスフレーズなしとなります。

```zsh
Enter passphrase (empty for no passphrase):
```

もう一度同じパスフレーズを入力し、Enter。

```zsh
Enter same passphrase again:
```

#### SSHキーをssh-agentに追加する

- ssh-agentを使うメリット
	- 複数のサーバーにSSH接続する際、毎回sshコマンドを入力しなくても良くなる（自動化）
	- サーバー上に秘密鍵をおく必要がない。

- バックグラウンドでssh-agentを開始し、秘密鍵の登録状況がないことを確認する。

ssh-agentを起動。

```zsh
$ eval "$(ssh-agent -s)"
```

秘密鍵の登録状況を確認する。なければ以下のように表記がある。

```zsh
$ ssh-add -l
The agent has no identities.
```

- (macOS Sierra 10.12.2以降を使用の場合）`~/.ssh.config`ファイルを修正し、以下のように記述。

```zsh
Host your_username
	HostName github.com
	User git
	AddKeysToAgent yes
	UseKeyChain yes
	IdentityFile ~/.ssh/id_rsa
```

- SSH秘密鍵をssh-agentに追加し、パスフレーズをキーチェーンに保存する。

```zsh
ssh-add -K ~/.ssh/id_rsa
```


### 3. GitHubアカウントへの新しいSSHキーの追加
- SSHキーをクリップボードにコピーする 

```zsh
$ pbcopy < ~/.ssh/id_rsa.pub
```
- GitHubにログインし、以下手順でSSHキーを登録する
	1. 右上のプロフィールをクリックし、`Settings`で設定画面へ移動
	2. 左側のメニューから`SSH keys`をクリック
	3. `Add SSH Key`をクリック
	4. `Title`に識別できる文字列を入力（My Macbook Proなど)
	5. `Body` にSSHキーをペースト
	6. `Add Key`をクリック

### 4. SSH接続をテストする
- ターミナルを開く。
- 以下コマンドで接続を確認する。

```zsh
$ ssh -T git@github.com
```
- 接続するかの確認メッセージが出るので、fingerprintが一致するかを確認して、`yes`と入力。
- 下記文字列が出力されれば無事認証！

```zsh
Hi your_username! You’ve successfully authenticated, but GitHub does not provide shell access.
```


### 【補足：設定漏れの場合】SSHキーパスフレーズを追加または変更する

とりあえずEnterでパスフレーズなしで済ませてしまった！というあなたのために。

以下コマンドで既存の秘密鍵のパスフレーズの変更が出来る。

```zsh
$ ssh-keygen -p
```

変更したい秘密鍵がカッコ内のファイルで間違いなければEnter。

```zsh
Enter file in which the key is (/Users/you/.ssh/id_rsa):
```

任意のパスフレーズを決め、入力してEnter。

```zsh
Enter passphrase (empty for no passphrase):
```

もう一度同じパスフレーズを入力し、Enter。

```zsh
Enter same passphrase again:
```

下記メッセージが出力されたらパスフレーズの設定が無事完了！

```zsh
Your identification has been saved with the new passphrase.
```


## 参考にさせて頂いたサイト（ありがとうございます）
[GitHub に SSH で接続する - GitHub ヘルプ](https://help.github.com/ja/github/authenticating-to-github/connecting-to-github-with-ssh)
[GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)
[お前らのSSH Keysの作り方は間違っている - Qiita](https://qiita.com/suthio/items/2760e4cff0e185fe2db9)
[2014-07-05](https://hnw.hatenablog.com/entries/2014/07/05)
[ssh-agentの使い方 - Qiita](https://qiita.com/isaoshimizu/items/84ac5a0b1d42b9d355cf)
[~/.ssh/configについて - Qiita](https://qiita.com/passol78/items/2ad123e39efeb1a5286b)