【ssh】sshでgithubに接続する方法（mac）

#【ssh】sshでgithubに接続する方法(mac)

sshを使ってgithubに接続できるようにする方法のメモ。


＜参考サイト＞

・[(Github公式) 既存の SSH キーの確認](https://docs.github.com/ja/github/authenticating-to-github/checking-for-existing-ssh-keys)
・[(Github公式) 新しい SSH キーを生成して ssh-agent に追加する](新しい SSH キーを生成して ssh-agent に追加する)
・[(Github公式) GitHub アカウントへの新しい SSH キーの追加](https://docs.github.com/ja/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account)
・[(Github公式) SAMシングルサインオンで利用するためにSSHキーを認可する](https://docs.github.com/ja/github/authenticating-to-github/authorizing-an-ssh-key-for-use-with-saml-single-sign-on)



##作業手順

1. [既存のSSHキーが存在するか確認](#1-既存のsshキーが存在するか確認)
2. [SSHキーの作成](#2-sshキーの作成)
    3. [作成方法](#作成方法)
    4. [SSHキーの注意点](#sshキーの注意点)
    4. [ssh-keygenのデフォルト設定](#ssh-keygenのデフォルト設定)
    5. [ssh-keygenのオプション](#ssh-keygenのオプション)
    6. [暗号化方式とビット長の種類](#暗号化方式とビット長の種類)
3. [キーをssh-agentに追加](#3-キーをssh-agentに追加)
    4. [ssh-agentとは？](#ssh-agentとは)
    5. [ssh-agentの起動と設定](#ssh-agentの起動と設定)
    6. [秘密鍵を追加](#秘密鍵を追加)
    7. [多段認証(ForwardAgent)](#多段認証forwardagent)
4. [キーをgithubに追加](#4-キーをgithubに追加)
5. [githubのSSOを使うためにキーを許可する](#5-githubのssoを使うためにキーを許可する)




<br>
##1. 既存のSSHキーが存在するか確認

lsコマンドで.sshフォルダへ移動する。
オプションは「-a」と「-l」を指定。
　┗　「-a」:隠しフォルダも表示
　┗　「-l」:詳細を表示
　┗　「-al」:オプション-aと-l

```
$ ls -al ~/.ssh
```

下記ファイルが表示されればキーが存在している。

`id_rsa`: 秘密鍵
`id_rsa.pub`: 公開鍵


暗号方式によって、「rsa」の部分が、「ecdsa」や「ed25519」になったりする。


フォルダが存在しない場合、あるいは新しいキーを作成する場合はSSHキーを作成する。




<br>
##2. SSHキーの作成
###作成方法
ssh-keygenコマンドでSSHキーを作成する。


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

＜オプションの内容＞
`-t`: 暗号化方式
`-b`: 鍵長（ビット長）
`-C`: コメント

暗号化方式rsa、ビット長4096bit、e-mailアドレスをラベルとしたSSHキーを生成する。

３回Enterを促される。パスフレーズを設定しない場合は3回Enterをクリック。



＜３回の確認内容詳細＞

```:1回目（フォルダとファイル名）
Enter file in whch to save the key (/Users/(username)/.ssh/id_rsa):
```

ファイルの保存場所とファイル名の確認。基本的にデフォルト。
※既存で鍵が存在する場合は上書きされる。



<br>

```:2回目（パスフレーズ）
Enter passphrase (empty for no passphrase):
```

パスフレーズはパスワードとほぼ同意（より長い設定が可能）
このパスフレーズは秘密鍵にアクセスするためのもの。

zipフォルダやexcelファイルにパスワードをかけるのと同じ。キー自体が暗号化しているので２段階承認となる。

パスフレーズは10文字以上推奨。後述のssh-agentにパスフレーズを記録することで、都度呼び出しの手間を省ける。



<br>

```:3回目（パスフレーズ）
Enter same passphrase again:
```

先程入力したパスワードの確認。
入力していない場合は空欄でEnter。


<br>
###SSHキーの注意点
作成した秘密鍵（ファイルの中身の文字コード）は超重要！漏れるのは厳禁。

この秘密鍵があれば、対となる公開鍵を登録している全てのサービスにSSHでアクセスできてしまう。



<br>
###ssh-keygenのデフォルト設定
オプション指定なしで鍵を生成した場合、

- 暗号化方式：rsa
- 鍵長：2048bit
- フォルダ： ~/.ssh
- 秘密鍵: id_rsa
- 公開鍵：id_rsa.pub



###ssh-keygenのオプション

キー生成時にはいくつかオプションがある。

| オプション | 内容 |
|:-:|:-:|
| -t  | 暗号化方式  |
| -b  | ビット長（鍵長）  |
| -C  | コメント  |
| -f  | ファイルパス  |
| -p  | 古いパスフレーズ  |
| -N  | 新しいパスフレーズ  |


オプションを設定しない場合、「-t」「-b」は自動で決まり、「-f」「-p」「-N」は質問される。



###暗号化方式とビット長の種類

| 暗号化方式 | デフォルト鍵長 | 鍵長オプション |
|:--|:-:|:--|
| RSA  | 2048  | 1024, 2048, 4096  |
| ECDSA  |256   |256, 384, 521   |
| ED25519  | 256  | 256  |


RSAはビット長が長いため暗号化と解読が遅い。
ED25519がより強固で速い仕様。OpenSSH 6.5以降でサポートされている。

OpenSSH6.5は2014年1月に発表された仕様。





<br>
##3. キーをssh-agentに追加
###ssh-agentとは？

秘密鍵を登録しておくツール。
パスフレーズも登録できるため、SSH接続する際のパスワード入力の手間を省ける。

秘密鍵は複数登録可能。


多段でSSH接続（あるサーバーを踏み台にして別のサーバーに接続）することも可能。

###ssh-agentの起動と設定

```
#ssh-agentの起動
$ eval "$(ssh-agent -s)"


#sshのconfigファイルを開く
$ open ~/.ssh/config

#(configファイルがない場合は作成)
$ touch ~/.ssh/config
$ open ~/.ssh/config

```

```:.ssh/configファイル
Host サーバー名(任意)
　AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_rsa
```


###秘密鍵を追加

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

追加する際にパスフレーズをキーチェン保存する。



###多段認証(forwardAgent)
AWSのgit-codecommitなど、githubにSSH接続し、githubからAWSに接続する設定も可能。

configファイルに以下を記述する。


```:.ssh/configファイル
ForwardAgent yes

Host サーバー名(任意)
  User ユーザー名
```





<br>
##4. キーをgithubに追加
githubにログイン後、以下ページの手順に沿って実行。

https://docs.github.com/ja/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/1818f6ad-1cdb-3440-acca-39969890208f.png)

- titleは任意。SSHキー識別用の名前をつける
- Keyには公開鍵の内容を登録。※秘密鍵ではない！

 


<br>
##5. githubのSSOを使うためにキーを許可する
以下URLに沿って実行。
https://docs.github.com/ja/github/authenticating-to-github/authorizing-an-ssh-key-for-use-with-saml-single-sign-on


以上。