Puttyで作成したGitHub向けの秘密鍵でVPSサーバーに接続

# はじめに
PuTTY Key Generatorで作成した秘密鍵をVPSサーバーに登録して接続しようとしたら躓いたのでメモとして残します。
[ConoHa VPSにGitHubのPrivateリポジトリをCloneする](https://create-it-myself.com/know-how/clone-github-private-ripogitory-on-conoha-vps/)
を参考に進めました。

# 環境
- Windows11
- さくらVPSサーバー CentOS7
- Puttygen Release 0.77

# 事前準備
GitHubのアカウントが作成済みで、privateレポジトリが作成済。
GitHub接続用の公開鍵・秘密鍵の生成済、GitHubに公開鍵を登録済。

# 作業
## 1. VPSサーバーにGitをインストール
```bash
$ sudo yum -y install gcc curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker autoconf
```
→参考：[CentOS7 に最新版の Git をインストールする方法](https://qiita.com/tomy0610/items/66e292f80aa1adc1161d)

インストールされたことを確認。
```bash
# git --version
git version 1.8.3.1
```
## 2.ローカルリポジトリにユーザ名とEmailアドレスを登録
```bash
$ git config --global user.name ****
$ git config --global user.email ****@gmail.com
```
*は実際のものに置き換える、以下同様


## 3.秘密鍵を生成する
これは、WinSCPにPutty Key Generatorがあったのでそれを使って作ってみた。このファイルを、　****_private.ppk（秘密鍵のファイル）としてローカルに保存。


## 4.GitHub向けの秘密鍵をVPSサーバーに登録する
VPS上のLinuxサーバに以下のコマンドで秘密鍵を登録する
```bash
$ mkdir -p ~/.ssh
$ vi ~/.ssh/[秘密鍵のファイル]
```
としてファイルに秘密鍵の情報を張り付ける。
`余計な改行などが入らないように注意`する。

次に、秘密鍵の権限を600に。
```bash
$ sudo chmod 600 ~/.ssh/[秘密鍵のファイル]
```

次に、ssh_configファイルにGitHubのSSH接続情報を登録。
```bash
vi ~/.ssh/config
```
```bash
Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/****_private.ppk[秘密鍵のファイル]
  User git
```
`HostName`と`User`はこれ固定にすること。

## 5.GitHubへのSSH接続確認
```bash
$ ssh -T github
```
>パスフレーズを問われたら、公開鍵/秘密鍵を生成したときに設定したパスフレーズを入力してください。
>「Hi [ユーザ名]! You've successfully authenticated, but GitHub does not provide shell access.」と表示されれば、GitHubへSSH接続が成功です。
>もし失敗した場合は、秘密鍵の設定に問題ないか確認してください。
引用：[ConoHa VPSにGitHubのPrivateリポジトリをCloneする](https://create-it-myself.com/know-how/clone-github-private-ripogitory-on-conoha-vps/)

とのことだが、やってみるとエラーで成功しない。
```
# ssh -T github
Enter passphrase for key '/root/.ssh/****_private.ppk':
Permission denied (publickey).
```

そこで、githubとの接続のデバッグログを出してみる。
-vパラメータで詳細デバッグが出る。
```bash
$ ssh -vT git@github.com
```
```bash
debug1: identity file /root/.ssh/****_private.ppk type -1
(略)
debug1: Trying private key: /root/.ssh/****_private.ppk
Enter passphrase for key '/root/.ssh/****_private.ppk':
debug1: No more authentication methods to try.
Permission denied (publickey).
```
となり秘密鍵の指定はあっているが、やはりエラー。

・・・この辺で、以下の記事で鍵の形式が違うかもと気づいたので、秘密鍵の形式を変更してみる。
[Puttyで作成したSSH鍵でGitHubにPushする](https://www.yuulinux.tokyo/10133/)
sshの秘密鍵には、ppk形式と、pem形式があり、teratermからSSH接続する際にはpem形式でなくてはならない、とのこと。

そこで、Putty上で、
【Conversions】→【Export OpenSSH key】でpem形式の秘密鍵を作成しなおし、再度テキストを
```bash
$ vi ~/.ssh/[秘密鍵のファイル]
```
で張り付けて中身を書き換える。

＜pem形式＞
```
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5A72A54C7EF7F262

shlEcck8giQGEN1FNaAy+UQbLegYCuEWeFOEZraBn6Gg9S09xsD9hm32K0OeMs4y
Oli0b1D7HP5AiQBJf910mBRulYL50e3OSuLtZjEjsl7aRE42+5lvKRHqMmNbgEIS

・・・・

v4k54aOs9n9zIFCIdmIYsvl7Rx0fhb9QJGEQaP9jmijtHVXkkpI8ndVoEl9DL7FI
hFGlGZMzTqLAuCTKCoWJ+VxWvW/fa8eJRxzcfLQd/1WXUt/VG9nruHqF+9nw+Pcg
-----END RSA PRIVATE KEY-----
```
再度接続確認。
```bash
ssh -T github
```
すると秘密鍵がbad permissionsと怒られたので、
```bash
# ssh -T github
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/root/.ssh/****_private.ppk' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/****_private.ppk": bad permissions
Permission denied (publickey).
```
```bash
# sudo chmod 600 ~/.ssh/****_private.ppk
```
でパーミッションを変更。

再度接続トライ。パスワードを入力すると、無事、
「Hi ****! You've successfully authenticated」
が出て接続に成功した。
```bash
# ssh -T github
Enter passphrase for key '/root/.ssh/****_private.ppk':
Hi ****! You've successfully authenticated, but GitHub does not provide shell access.
```

# 参考

- [ConoHa VPSにGitHubのPrivateリポジトリをCloneする](https://create-it-myself.com/know-how/clone-github-private-ripogitory-on-conoha-vps/#GitHubSSH)
- [Puttyで作成したSSH鍵でGitHubにPushする](https://www.yuulinux.tokyo/10133/)