Windows7からGitHubへSSH接続する手順(プロキシ環境有)

# やりたいこと

* Windows7 から GitHub へSSH接続する。

# 前提環境

* プロキシ環境有: `$proxyserver`:`$port`
* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64
* [GitHub for Windows](http://qiita.com/bu-son/items/4a1ce97885ceaab4c477) インストール済み

# 手順

## クライアント(Windows7)の公開鍵(id_rsa.pub)を生成

Git Bash(C:\Program Files\Git\git-bash.exe)で下記のコマンドを実行します。

| 変数 | 説明 |
|:--|:--|
| `mail@example.com` | 使用する GitHub アカウントのメールアドレス |
| `$user_profile` | ユーザープロファイル |
| `$fingerprint` | フィンガープリント |

```bash:git-bash.exe
ssh-keygen -t rsa -C "mail@example.com" # <= 実行するコマンド
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/$user_profile/.ssh/id_rsa): # <= 空Enter
Enter passphrase (empty for no passphrase): # <= 公開鍵のパスフレーズを入力してEnter
Enter same passphrase again: # <= 公開鍵のパスフレーズを入力してEnter
Your identification has been saved in /c/Users/$user_profile/.ssh/id_rsa.
Your public key has been saved in /c/Users/$user_profile/.ssh/id_rsa.pub. # <= 生成された公開鍵
The key fingerprint is:
SHA256:$fingerprint mail@example.com
The key's randomart image is:
+---[RSA 2048]----+
|        .. .o=== |
|       ..   =.o +|
|        .. = B  o|
|       o  o O + .|
|      o S  * = .o|
|       o    = o.=|
|      .    . + +=|
|            = ++=|
|           . ..*E|
+----[SHA256]-----+
```

## 公開鍵(id_rsa.pub)をGitHubへ登録

1. [GitHub](https://github.com) にログイン
2. SSHキーの設定画面([SSH Keys](https://github.com/settings/ssh))を開く。
3. [New SSH Key]ボタンを選択
4. Title: 任意 (例: homepc1)
5. Key: 先ほど生成した公開鍵(c:\Users\\\$user_profile\\.ssh\id_rsa.pub) をテキストエディタで開きコピー＆ペースト
6. [Add SSH Key]ボタンを選択

## c:\Users\$user_profile\\.ssh\config の設定

1. c:\Users\\\$user_profile\\.ssh\config を開く
2. 下記のように設定する

| 変数 | 説明 |
|:--|:--|
| `$user_profile` | ユーザープロファイル |
| `$proxyserver` | プロキシサーバー |
| `$port` | ポート |

```bash:config
Host github.com
  User git
  Hostname ssh.github.com
  Port 443
  IdentityFile "c:\Users\$user_profile\.ssh\id_rsa"
  ProxyCommand connect.exe -H $proxyserver:$port %h %p
```

※ `Port`: 22 ではなく 443
※ `IdentityFile`: フルパス。Windowsの場合はパスにスペースが含まれる場合があるのでダブルコーテーション付き
※ `ProxyCommand`: プロキシ環境では設定が必要

## c:\Users\$user_profile\\.ssh\config にシンボリックリンクを貼る

コマンドプロンプト(cmd)で下記のコマンドを実行します。

* `$user_profile`: ユーザープロファイル

```bat:cmd.exe
mklink "C:\Program Files\Git\etc\ssh\ssh_config" "C:\Users\$user_profile\.ssh\config" :: <= 実行するコマンド
C:\Program Files\Git\etc\ssh\ssh_config <<===>> C:\Users\$user_profile\.ssh\config のシン
ボリック リンクが作成されました
```

ssh_config が既に存在している場合はリネームしてください。(例: ssh_config.org)

## sshコマンドでGitHubへ接続確認

Git Bash(C:\Program Files\Git\git-bash.exe)で下記のコマンドを実行します。

| 変数 | 説明 |
|:--|:--|
| `$id` | GitHub id |
| `$user_profile` | ユーザープロファイル |

```bash:git-bash.exe
ssh -T git@github.com # <= 実行するコマンド
Enter passphrase for key 'C:\Users\$user_profile\.ssh\id_rsa': # <= 公開鍵のパスフレーズを入力してEnter
Hi $id! You've successfully authenticated, but GitHub does not provide shell access.
```

接続NGの場合は `ssh -vT git@github.com` でデバッグ。

# 完了

# 参考文献

* [Windowsで社内LANからプロキシを超えてGitHubにSSH接続する方法](http://re-dzine.net/2012/08/over-proxy-github/)
* [Githubにport:22 で push できなかった場合の対処法](http://qiita.com/SOJO/items/74b16221580a17296226)
* [windowsのgitのssh_configを設定する(cmder](http://qiita.com/fagai/items/5b74ef4cf6b497f54312)
* [(Windows)Git付属のsshのssh_configの場所](http://qiita.com/ques0942/items/1a6c198c6d16ac297f2c)