githubのssh認証が一生うまくいかない話@win10

2019.10.07

講義で必要があっていままで避けていたssh認証でgithubの認証をすることにしたけど滅茶苦茶苦労したのでここにその経緯を書いておこうと思う．
(結局は色んなサイトのまとめになってしまうとは思うけど)
かなり時間がかかったため，記憶と履歴を掘り返しながら書いている．
多少の記憶違いは悪しからず．

発生した条件

- windows10
- openssh ver7.7


はじめにやったこと．

- 鍵をつくる
- 公開鍵をコピーする
- githubに登録する
- configを作成しなおす

基本的なwindowsでの認証鍵の作り方はここを参考に
[お前らのSSH Keysの作り方は間違っている](https://qiita.com/suthio/items/2760e4cff0e185fe2db9)
あとここも詳しかった
[GitHubでssh接続する手順](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)

## 1つ目の壁 ~public key登録してるんやが~
で，.sshフォルダにid_rsaとid_rsa.pubを作成し，githubで鍵を登録した．
できたぞ！！とgit clone を実行しようとした

```
Cloning into 'AAA AAA'...
Warning: Permanently added the RSA host key for IP address 'xxx.xxx.xxx.xxx' to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

あかんかった．
取り敢えずopenssh publickey permission deniedとかで調べているとこの辺が出てくるのでトライしたけど全部結果は変わらなかった
この時調べて出てきたのはこの辺り

- [Gitで”Permission denied (publickey).” が出たときのメモ](https://qiita.com/sygnas/items/43306a738f01cb7ab45c) 
- [git cloneしようとした時でたエラーと戦った話](https://qiita.com/flmil/items/2a2114bc73ec2a6f5e90)
- [【git エラー解決策】Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. が出た時の解決方法](http://tusukuru.hatenablog.com/entry/2018/08/29/021651)

まあ当たり前だけどよく確認しましょうって話よね．
んで最後にだいたいを実行して接続確認をする．

```
>>> ssh -T git@github.com
Hi xxxxxxxxx! You've successfully authenticated, but GitHub does not provide shell access.
```
こいつはうまくいっていた．
けどやっぱりcloneしようとすると失敗する．

更に調べていくと次のワードにぶつかった．
ssh-add, ssh-agent
ソース
[新しい SSH キーを生成して ssh-agent に追加する](https://help.github.com/ja/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)


ssh-agentにkeyを登録しなければならないらしい
よーし光が見えてきたぞ，と実行に移す．

## ２つめの壁 ~ssh-agentってなんやねん~
そもそもssh-agentないですよって言われた．
なかなか解説が見当たらなくて苦労したけど，そこもひっくるめて簡単に言えば
OpenSSHのバージョンが低かったらしい．
(後から思えば，本当にここが悪かったのかなあ？) 
とにかく，ssh-agentとssh-addを使うことができなかった．
状態は

- ssh -T git@github.comは返ってくる．
- sshを用いたgit cloneはpermission denied(public key)のまま

以下のコマンドでssh接続のデバッグ表示もすることができる．

```
>>> ssh -Tv git@github.com
```
> このデバッグの時に表示されたアラートが，バージョンアップしたら消えたので，OpenSSHの7.7より8.0のがRSAの鍵の強度が高いらしい． 


使ってたOpenSSHのバージョン
OpenSSH 7.7p1

入れ直したOpenSSHのバージョン
OpenSSH 8.0p1
[OpenSSH DL元](https://github.com/PowerShell/Win32-OpenSSH/releases)

インストールに有用だった参考サイト
[Windows Server 2019 および Windows 10 用 OpenSSH のインストール](https://docs.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_install_firstuse)
[Windows10にssh-agentをインストール](https://www.mazn.net/blog/2019/06/10/1777.html)

この辺りからWindowsPowerShellを使って作業し始めた．
やっていることは，
パッケージダウンロード→path設定→powershellでインストールと起動
の流れ．
ここのクライアント側の作業も参考にした
[WindowsにOpenSSHをインストールする](http://zorinos.seesaa.net/article/450658963.html)

バージョンアップして，git_bashを立ち上げ，最後にやったことは以下

```
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-agent -s
ssh-add ~/.ssh/id_rsa
```
サイトによっては，二行目をeval $(ssh-agent -s)にすると書いてあるが，win10の場合evalのカッコ内だけ入力すれば大丈夫．

雑多な情報を集めた記事になってしまった．許してほしい．．．．|:3ミ

## まとめ
- win10でssh認証をしたい場合
- ssh-keygenで鍵をつくる
- ssh-agentを起動する
- ssh-addに認識させる
- githubに鍵を登録する

という作業が必要．
場合によっては，ssh-addやssh-agentがない場合があるので，その場合は適宜インストール作業する必要がある．

### 追記
この状態では，端末を閉じるとまたエラーが出るので，
現在，gitbashを起動し，


```
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
``` 
をやり直している．
(今度直そう…)