【Git Bash】SSHキーの作成＆公開鍵の登録（Bitbucketを例に）

## 環境
+ Microsoft Windows 10.0.22000.318（21H2）
+ Git Bash 2.34.1.windows.1

## 手順
### 1. 鍵を入れるフォルダに移動

```
$ cd ~/.ssh
```

### 2. 鍵を生成する
`ssh-keygen` コマンドで鍵を生成する。

```
$ ssh-keygen -t ed25519 -C xxx@xxx.xxx -f ~/.ssh/id_ed25519_bitbucket
```

#### ssh-keygenの主なオプション
その他のオプションについては[こちら](https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html)

| オプション | 説明 |
|:-:|:--|
|`-t [方式]`|作成する鍵の暗号化形式を「rsa」（デフォルト）、「dsa」「ecdsa」「ed25519」から指定する|
|`-b [ビット数]`|作成する鍵のビット数を指定する（RSA形式の場合、デフォルトは2048bit）|
|`-f [ファイル名]`|ファイルを指定する（生成または読み出すファイルを指定）。ただし、併用するオプションによって意味が変化する（通常は鍵ファイル）|
|`-C [コメント]`|コメントを指定する（デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除）|


[こちら](https://sig9.hatenablog.com/entry/2020/01/11/000000)や[こちら](https://qiita.com/kazokmr/items/754169cfa996b24fcbf5#github%E3%81%A7%E4%BD%BF%E3%81%86ssh%E9%8D%B5%E3%81%AF-ed25519%E3%81%8C%E3%81%8A%E3%81%99%E3%81%99%E3%82%81)を参考にすると、RSA 鍵より ED25519 鍵の方が良さそうなので、ここでは、暗号化形式を「ed25519」にした。

また、例は Bitbucket 用なので、コメントは Bitbucket に登録したメールアドレス、ファイル名は ` id_ed25519_bitbucket` とした。（特に指定しない場合は `-f` 以降不要）



```:実行例
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/USERNAME/.ssh/id_ed25519_bitbucket
Your public key has been saved in /c/Users/USERNAME/.ssh/id_ed25519_bitbucket.pub
The key fingerprint is:
SHA256: ... xxx@xxx.xxx
The key's randomart image is:
+--[ED25519 256]--+
...
+----[SHA256]-----+
```

`Enter passphrase:` で適当なパスフレーズを入力し、`Enter same passphrase again:` でもう一度同じパスフレーズを入力する。（設定しない場合は未入力で Enter）

これで
秘密鍵：`id_ed25519_bitbucket`
公開鍵：`id_ed25519_bitbucket.pub`
が作成された。

### 3. configファイルに記載
config を書くメリットについては[こちら](https://qiita.com/passol78/items/2ad123e39efeb1a5286b#sshconfig%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%A8%E4%BD%95%E3%81%8C%E5%AC%89%E3%81%97%E3%81%84%E3%81%8B)

`ls` でファイルがあるか確認し、ない場合は作成する。

```
$ touch config
```
Vim や Atom で config を編集（コマンドから編集しない場合はスキップ）

```
$ vim config  # vim
$ atom config  # Atom
```
vim の場合は「i」キーで挿入モードに入り、以下のように入力。「Esc」キーでノーマルモードに戻り、`:wq`（＋Enter）で保存＆終了。（vim 操作についての詳細は[こちら](https://prograshi.com/general/editor/vi-vim-editor/)）

```
Host bitbucket.org
  HostName bitbucket.org
  IdentityFile c:/Users/USERNAME/.ssh/id_ed25519_bitbucket
  User git
```

|設定|内容|
|:--|:--|
|Host|接続名|
|HostName|ホスト名|
|IdentityFile|鍵へのPATH|
|User|ユーザー名|

### 4. SSHキーを登録
SSHキーの公開鍵をコピー

```
$ cat ~/.ssh/id_ed25519_bitbucket.pub | clip  # Windows
$ cat ~/.ssh/id_ed25519_bitbucket.pub | pbcopy  # Mac
```

#### Bitbucket の場合
1. [Bitbucket](https://bitbucket.org/) にログイン
1. アイコンをクリックし、「Personal settings > SSH keys」 と進み、「Add key」をクリック
1. Label には任意のラベル名、Key にはコピーした公開鍵を入力

これで端末からの鍵認証ができるようになった。


### 5. ssh-agentに登録
Windows では `ssh-agent` に `add` する必要がある。

`ssh-agent` を起動

```
$ ssh-agent bash
```

ssh-agent に秘密鍵を登録

```
$ ssh-add id_ed25519_bitbucket
```

確認（鍵の情報が表示されればOK）

```
$ ssh-add -l
```

### 6. 接続確認
`ssh -T [Host]` で確認
以下のように出力されればOK

```
$ ssh -T bitbucket.org
authenticated via ssh key.

You can use git to connect to Bitbucket. Shell access is disabled
```

### 7. Git Clone
1. [Bitbucket](https://bitbucket.org/) でリポジトリ作成済みとする
1. 「Clone」をクリックし、コマンドをコピー
1. コピーしたコマンドを実行し、実行したディレクトリにクローンされていることを確認

```
$ git clone git@bitbucket.org:USERNAME/REPOSITORY.git
Cloning into 'REPOSITORY'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
```

## 参考
https://qiita.com/suthio/items/2760e4cff0e185fe2db9

https://qiita.com/sygnas/items/43306a738f01cb7ab45c

https://qiita.com/shizuma/items/2b2f873a0034839e47ce

https://qiita.com/_am_/items/d7437ce01f623a20f1a7

https://qiita.com/yukihigasi/items/a788039801bee07e55a1

https://qiita.com/MegaBlackLabel/items/54f2a874acda6cb763f0

https://qiita.com/coffee_g9/items/e1b9ab28cfa54f854308

https://qiita.com/0084ken/items/2e4e9ae44ec5e01328f1

https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html

https://qiita.com/kazokmr/items/754169cfa996b24fcbf5#github%E3%81%A7%E4%BD%BF%E3%81%86ssh%E9%8D%B5%E3%81%AF-ed25519%E3%81%8C%E3%81%8A%E3%81%99%E3%81%99%E3%82%81

https://sig9.hatenablog.com/entry/2020/01/11/000000

https://prograshi.com/general/editor/vi-vim-editor/