ESXiで作成したVMにsshの公開鍵認証を行う

# 環境
クライアント

- Windows 11
- PowerShell 7.2.0
- OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2



# 目的
ssh ＜VM名＞とすることでパスワードを入れずにVMに入って作業することができるようになる記事です。
この記事ではクライアント側の操作は（クライアント）、ホスト側の操作は（ホスト）と書いてあります。
![卒業課題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690608/f6ebe1d9-6136-1b1c-253a-da38c8e7d6c9.jpeg)

# 鍵を作成（クライアント）
## 鍵を生成
```powershell
ssh-keygen -t ed25519
```

を入力したら、Enterキーを3回押してください。

```powershell
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\＜ユーザー名＞/.ssh/id_ed25519):
Created directory 'C:\Users\＜ユーザー名＞/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\＜ユーザー名＞/.ssh/id_ed25519.
Your public key has been saved in C:\Users\＜ユーザー名＞/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:　＜鍵がここに表示されます＞
The key's randomart image is:
+--[ED25519 256]--+
|o*=oo            |
|@o+* .           |
|*Bo.+            |
|Bo.= .           |
|o.= =   S        |
| o +   .         |
|o = E   .        |
|o* B . .         |
|*o=.+o=.         |
+----[SHA256]-----+
```
## 作成した鍵の確認
```powershell
dir .ssh
```

を入力して、`id_ed2551`と`id_ed25519.pub`があることを確認する。


```powershell
    Directory: C:\Users\＜ユーザー名＞\.ssh

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2021/11/30    11:58            411 id_ed25519
-a---          2021/11/30    11:58             99 id_ed25519.pub
```



# 設定ファイルを作成する（クライアント）
## 設定ファイルの作成
```powershell
notepad .ssh\config
```
![スクリーンショット 2021-11-30 121001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/690608/1fb778cf-b4ef-33be-4675-3996b009ecfe.png)
と警告が出るので新しく作成してください。

## 設定ファイルに書く内容

```config:.ssh\config
ForwardAgent yes

Host ＜自分が入れたい文字＞
  Hostname ＜VM名＞
  User ＜ユーザー名＞
  Port 22
  IdentityFile ~/.ssh/id_ed25519
```

| 属性 | 値 |
| -------- | -------- |
| ForwardAgent    | 既に書いている場合は入れなくていいです。     |
| Host  | VM 名だと覚えやすいですが、好きな文字を入れましょう。最終的にターミナルに「ssh ＜自分が入れたい文字＞」を入力することで VM に ssh 接続します。    |
| Hostname    | VM 名、もしくは IP アドレスを入力しましょう。  |
| User    | VM に登録したユーザー名を入力してください。     |
| Port      | デフォルトは22番です。VM側で Port 番号を変更しているなら変更した Port 番号を入力してください。     |
| IdentityFile    | 秘密鍵の場所を入力します。今回は `id_ed25519.pub` の共通鍵を VM に登録するので、秘密鍵 `id_ed25519` を登録します。   |


## ファイル名をconfig.txtからconfigに変更する
```powershell
mv .ssh\config.txt .ssh\config
```

# 公開鍵を出力（クライアント）
type コマンドで公開鍵の中身を出力します。今回は `id_ed25519` の公開鍵を出力します。人によって中身は異なります。

```powershell
type .ssh\id_ed25519.pub
```

を入力すると鍵が出力されます。
出力された鍵をVMに登録しましょう！

# サーバ側（VM側）の操作（ホスト）
以下に書いてあるのは[設定ファイルに書く内容](https://qiita.com/tororoMeshi/private/bb279f940fd33879b2cd#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E6%9B%B8%E3%81%8F%E5%86%85%E5%AE%B9)で入力した＜ユーザー名＞と同じユーザーでログインしているときの操作です。
 


.ssh があることを確認してください。

```powershell
cd
ls -a
```
```powershell
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  .ssh  .sudo_as_admin_successful  .viminfo
```
ある場合

```powershell
chmod 700 .ssh
```
ない場合

```powershell
install -m 700 -d ~/.ssh
```
公開鍵をホスト側に登録します。

```powershell
vim .ssh/authorized_keys
```
[先ほど出力した公開鍵（.pub）](https://qiita.com/tororoMeshi/private/bb279f940fd33879b2cd#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E5%87%BA%E5%8A%9B%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88)の記述をそのままコピペして追加してください。すでにファイル内に何か書いてあった場合、改行して追加してください。 

```.ssh/authorized_keys　の例
ssh-ed25519 ＜鍵＞ ＜クライアントのユーザー名＞@＜クライアントのホスト名＞
```
`authorized_keys`を root ユーザーのみが読み込みと書き込みをできるようにします。

```powershell
chmod 600 .ssh/authorized_keys
```


# 確認（クライアント）
自分のPCに戻って

```powershell
ssh ＜自分が入れたい文字＞
```
でログインできることを確認してください。


# 参考文献
- ssh 公開鍵認証
    - [sshキー(秘密鍵・公開鍵)の作成と認証　流れ](https://qiita.com/soma_sekimoto/items/35845495bc565c38ae9d)
- ファイルの所有者や許可
    - [How To Use chmod and chown Command in Linux](https://www.cyberciti.biz/faq/how-to-use-chmod-and-chown-command/?__cf_chl_captcha_tk__=584f598044e4e7ed1637a34cb1a7e64c76cb566b-1625798253-0-AY4OEWKpxDQePurEFWnSz468yjRuYUPqxMK32sKNIPaBgCncMv8n0zDZ4p00PFMFrUC5dFPMjnblZOshfKCPIwrzQQxHeiDa1zQ_YzuU2XMr16XqApRfTrpxguXuWfBrTvg9tiKG7z90iDtIp2Swc-CpBDUZVlL9h0hrwsJ-IQLFgxTj8DYdvlKVou3_kJw03ai4wdzgz8WEqU32WhPIGdBa0OW6Gmq0iKFrHn8vbKBEG8s1FnwoZOtXvLMaL3USKYFoWkYbMmjKAzeDmg2-gY0YnCpZpK0EjrMVLfU7zPKv8NxESsvM-jgBIcB7RQCq-DqOSlNo8auPruUo4T2OPDnd_skg15SlgRfGK1INApjVCmgo2Bb0Sj0I4yYutScPRU-YkVsbOEWz6-wfFlxaP6QyoZwcH8Wo9PKMOtpc7B5z_w0UOfQ6EwJMqPXzgm6pXD81zhUMc1xGgwWZpo8dW-YBRw83cYWO8BkFsKN-XakUC9R11vSfMYSlKWht_rJYZ3NaYQMtKpyf9xfJMHdVoTJv4TW7KDhZGFL00uA8ryF9LZiM1Q0xfT-yL7shjD6roy-v8EKnmRF8YlkPpkSoUXYz8qn_LXUBJ_rZFW7scAIU1a8a_mzQFA6nbjPFckRKEX7I5jLtd4yibmlHb2_wghidhSCBrJm4HtYA4GNwg8KbS2bIVTDeY4y66tovsO3tkTCcp-aSDvsair6cGoIZGAadghnQ_YNlgSgYA4lHiA-o)