[Windows] Visual Studio CodeでGithub・Gitlab・Bitbucketそれぞれにssh接続する

### この投稿に至るまでの経緯
- Visual Studio CodeでGithubにHTTPS接続していたがssh接続に切替
- 過去の記事を参照してPuttyでssh接続
- 後日、Gitlabでもssh接続を追加。Gitlabにgit clone時に途中パスワード聞かれた状態でフリーズした
- 複数ssh接続する際に問題が出た際にWin32-OpenSSHをsshで使うとそれぞれに接続できた

以下、備忘録として各種インストール・設定を記載

### 各種環境
- windows 10
- Visual Studio Code  1.20.1
- ~~Win32-OpenSSH v1.0.0.0-Beta~~
- Git for Windows 2.16.2

### 各種インストール・設定
#### 1. [Git for Windows](https://gitforwindows.org/)
インストール時の設定

![g1.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/d1b3e0f3-3510-1e1c-30b9-a860e4e1044e.png)
![g2.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/9a2fc00f-13a9-9867-1043-f9fea85d636e.png)
![g3.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/5c4a8284-9eaf-d010-73b8-193ec2fd5ae1.png)
![g4.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/cdabb1d4-1982-0eb8-6907-568091f4d830.png)
![g5.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/fbed6fd3-8df4-0c75-86c6-b6c67f1cba9d.png)
![g6.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/1bee24fa-f35e-3c2a-46b7-198c3c7eadfc.png)
![g7.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/abe5c5dc-6ffd-3ae3-fdaa-fece70c70f81.png)
![g8.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/feb784c5-0dbe-a078-2204-9deedd3f0345.png)
![g9.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/dc0c5f5b-2650-675b-91f6-a68a3d999bd3.png)


#### ~~2. [Win32-OpenSSH](https://github.com/PowerShell/Win32-OpenSSH)~~
- ~~[OpenSSH-Win64.zip](https://github.com/PowerShell/Win32-OpenSSH/releases/download/v1.0.0.0/OpenSSH-Win64.zip)をダウンロード~~
- ~~解凍後、フォルダ名をOpenSSHとして「C:\」にコピー~~


#### ~~3. 環境変数追加~~
- ~~「コントロールパネル」→「システム」→「システムの詳細設定」→「環境変数」選択~~
- ~~システム環境変数の「Path」に「C:\OpenSSH」を追加~~
- ~~システム環境変数に新規で変数名「GIT_SSH」、変数値「C:\OpenSSH\ssh.exe」を追加~~

#### ※、2020年6月25日追記
OpenSSHはWindows10では「%SYSTEMROOT%\System32\OpenSSH」にあるため、Win32-OpenSSHの追加は不要となっています。

#### 4. git config

```powershell:powershell
※、名前とメールを設定
git config --global user.name "[your_name]"
git config --global user.email [your_mail_address]@[your_mail_domain]
```


#### 5. ssh-keygen

```powershell:powershell
cd ~/
cd .ssh
.sshがない場合は作成

※、各サービスで登録したメールを設定
ssh-keygen -t rsa -f id_rsa_for_github -b 4096 -C "[your_mail_address]@[your_mail_domain]"
ssh-keygen -t rsa -f id_rsa_for_gitlab -b 4096 -C "[your_mail_address]@[your_mail_domain]"
ssh-keygen -t rsa -f id_rsa_for_bitbucket -b 4096 -C "[your_mail_address]@[your_mail_domain]"

※、ここではパスワードを入れずにEnterのみ入力して終了
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```


#### 6. config追加
.sshに「config」ファイルを作成。以下の内容を設定

```config:config
Host github.com
  User git
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_for_github
  IdentitiesOnly yes

Host gitlab.com
  User git
  Hostname gitlab.com
  IdentityFile ~/.ssh/id_rsa_for_gitlab
  IdentitiesOnly yes

Host bitbucket.org
  User git
  Port 22
  Hostname bitbucket.org
  IdentityFile ~/.ssh/id_rsa_for_bitbucket
  IdentitiesOnly yes
```


#### 7. ssh公開鍵の登録(Github)

```powershell:powershell
cat id_rsa_for_github.pub | clip
```
上記コマンドで公開鍵コピー後、以下の[公式の手順](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/)に従ってキーを設定
![github.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/241af83e-3daf-11de-684f-594cfd3a8911.png)


#### 8. ssh公開鍵の登録(Gitlab)

```powershell:powershell
cat id_rsa_for_gitlab.pub | clip
```
上記コマンドで公開鍵コピー後、以下の[公式の手順](https://gitlab.com/help/gitlab-basics/create-your-ssh-keys.md/)に従ってキーを設定
![gitlab.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/192542e7-619e-109d-27ca-c948165542ff.png)


#### 9. ssh公開鍵の登録(Bitbucket)

```powershell:powershell
cat id_rsa_for_bitbucket.pub | clip
```
上記コマンドで公開鍵コピー後、以下の[公式の手順](https://confluence.atlassian.com/bitbucket/set-up-additional-ssh-keys-271943168.html)に従ってキーを設定
![gitbucket.PNG](https://qiita-image-store.s3.amazonaws.com/0/11672/c849357e-868e-47e6-3d9e-cbce4c37128c.png)


#### 10. sshでの接続確認

```powershell:powershell
ssh -T github.com
ssh -T gitlab.com
ssh -T bitbucket.org
```


### まとめ
- Windows環境でgit使用時にssh接続できなかった場合はWin32-OpenSSHを使う
- GIT_SSHを環境変数で設定する
- .sshにconfigファイルのみで動くはずなのに、動かなかった原因は未調査