git公開鍵の追加方法


___________________________________________________

# 問題の経緯
* 環境:Windows7,8,10 64bit
* `git push origin master`したときに"permission denied"エラーが出たときのトラブルシューティングメモ
* 今までgitは[Git for Windows](https://git-for-windows.github.io/)から落として、付属してきたmingw32ターミナル上からコマンドぺちぺち打ち込んでた。
* 最近ターミナルエミュレータ[cmder](http://cmder.net/)導入した。
	- fullバージョン落としたらgit付属してきた。
	- cmder上でmsysとかmingw開いてgitしたかった。
cmder上でmingw開いて`git add .`と`git commit -m"なんちゃらかんちゃら"`まではコマンド通るのに`git push origin master`すると

```
Permission denied (publickey).
fatal: Could not read from remote repository.
```

![Image.png](https://qiita-image-store.s3.amazonaws.com/0/113494/edf9d929-18ff-1c0e-ebfe-1428b4529e95.png)

___________________________________________________


# 解決法



## 公開鍵作る
git for windowsのときは勝手にやってくれたのかな？公開鍵作った覚えない

### コマンドプロンプト上でgit-bash立ち上げる
git-bashを開く(C:\Users{USERNAME}\AppData\Local\GitHubみたいな感じの、gitの入っているところに環境変数のパスが通っているならコマンドラインに`git-bash`と打ち込んでgit shellが開く)

```sh
$ git-bash
```

>別にgit-bashでなくてもよいんではないか疑惑。
bashなら何でもいいんじゃない？


### ssh-keygen走らせる

```sh
$ cd ~/.ssh   #"~"はホームディレクトリの意味。
$ ssh-keygen -t rsa -C "mymailaddress@gmail.com"
```

ホームディレクトリはLinuxユーザーなら常識。
windowsユーザーなら、ホームディレクトリとして環境変数にHOMEの名前で 追加しておくとよい。
> `Win+pause > 詳細設定 > 環境変数` で環境変数の設定に行ける。
例)HOME C:\Users\<YourName>\Documents
僕はDropbox内にホームディレクトリ作ってます。
![homedir.png](https://qiita-image-store.s3.amazonaws.com/0/113494/21309582-337a-554a-5fd7-ddd5874b8dd4.png)


___
>**ホームディレクトリに`ssh-keygen`がない？**

>Cmderのgit-for-windowsを使い始めて分かったけど、`ssh-keygen.exe`は
>
```
<Cmderインストールディレクトリ>Cmder\vendor\git-for-windows\usr\bin\ssh-keygen.exe
```
>にあるようだ

___




さて、`ssh-keygen`走らせるとこんなん表示される。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/e/Users/U1and0/Dropbox/Program/.ssh/id_rsa):
```

書いてあるように
>public/private rsa key pair`が`generate`された

ようだ。うーむよくわからん。
さらに続いて
> Enter file in which to save the key (/e/Users/U1and0/Dropbox/Program/.ssh/id_rsa):

とある。さっき指定したHOMEディレクトリにrsa作るつもりらしい。
言われたからENTER押す。
するとこう言ってくる。

```sh
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

ということでパスワードを設定(確認含めて2回打つ。)

>**追記**
パスワードはなくても動く！（←よく理解していない人のコメント）
pushするたびにパスワード聞かれなくて楽だ
↑empty for no passphraseとあるからなくてもおかしくない？

ということでパスワード打たずにEnter二回押す。

```
Your identification has been saved in /e/Users/U1and0/Dropbox/Program/.ssh/id_rsa.
Your public key has been saved in /e/Users/U1and0/Dropbox/Program/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:**********************************
The key's randomart image is:
+---[RSA 2048]----+
|          ..oo.  |
|     . . . ** ** |
|    . + =**     .|
|     + + @ ** .  |
|    .   *****  . |
|         + o =.oo|
|        . . o***o|
|              **+|
|             .=X@|
+----[SHA256]-----+
```


identificationとpublic keyが`%HOME%/.ssh`ディレクトリ下の`id_rsa`と`id_rsa.pub`というファイルに作られたようだ。

ssh-keygenからここまでの流れ↓

![sshkeygen.PNG](https://qiita-image-store.s3.amazonaws.com/0/113494/b40bf05e-facd-0616-bc9c-d9ca9a2f1e5e.png)






## sshエージェント走らせる
[Generating an SSH key](https://help.github.com/articles/generating-an-ssh-key/)によると
`eval $(ssh-agent -s)`と打ってバックグラウンドにsshエージェントとやらを走らせる
そうするとなんか数字が返ってくる

```sh
$ eval $(ssh-agent -s)
Agent pid {数字が5桁くらい}
```






## sshエージェントに公開鍵を追加する

```sh
$ ssh-add <HOMEディレクトリ>/.ssh/id_rsa (+パスワード？)　　　　#←打ち込む。パスワードなければそのままエンター
Enter passphrase for **************/.ssh/id_rsa:　　　←こんなの返ってくる
Identity added: *******************************_rsa (**********)
```









## idコピーする

```
clip < ~/.ssh/id_rsa.pub
```

と打ち込む。
するとクリップボードに長々とidがコピーされるので、[Adding a new SSH key to your GitHub account](https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/)に従いgithubのSetting>SSH keys>Keyの欄に~~"ssh-rsa"の文字を取り除いて~~貼り付ける。"ssh-rsa"取り除くと怒られる。Titleはテキトーに。







## GitHubに公開鍵を追加

ブラウザ開いて[GitHubの設定のページ](https://github.com/settings/keys)へ。
githubのSetting>SSH keys>Keyの欄に貼り付ける。Titleはテキトーに。

![スクリーンショット 2016-02-20 19.05.05.png](https://qiita-image-store.s3.amazonaws.com/0/113494/fed68da9-96af-f99b-11b1-17ee2504a855.png)


## Bitbucketに公開鍵を追加
同様に[Bitbucket](https://bitbucket.org)のssh設定ページへ飛び(アカウント→設定→SSH鍵→鍵を追加)、クリップボードにコピーしたid_rsa.pubの中身を貼り付ける。

<img width="960" alt="bitbucket_sshkey.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/113494/8933dfc4-be5a-81be-75cd-c50f1018cb90.png">


___________________________________________________

### 参考
[githubへpushできないときの対処(permission denied)](http://blog.just1factory.net/programming/131)
[Generating an SSH key](https://help.github.com/articles/generating-an-ssh-key/)