【備忘録】RaspberryPiに公開鍵認証でVSCode SSH接続をする

ラズパイにSSH接続ができ、VSCodeをインストールしたまでが前提
## PC上で公開鍵と秘密鍵を作る
クライアントPC上で公開鍵・秘密鍵を作る。今回はRSA方式2048bitsで作る。

PC上のコマンドプロンプトから
```
ssh-keygen -t rsa -b 2048
```
を実行すると保存先やパスフレーズを聞かれるので入力する。
```
C:\Users\Username>ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\Username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\Username/.ssh/id_rsa.
Your public key has been saved in C:\Users\Username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:****************************************** ---- 
---@-------------------------------------
The key's randomart image is:
+---[RSA 2048]----+
|=E=+.            |
|o=*.             |
|oBo.             |
|o..+             |
| +. +   S        |
|+.o*...  .       |
|* =o=oo   o      |
|oB .oB . . o     |
|o .oBoo...o      |
+----[SHA256]-----+
```
id_rsaという秘密鍵ファイルとid_rsa.pubという公開鍵ファイルができる。

<br>

よく使うオプション
|オプション|意味|
|:---------|:--------|
|-t |作成する鍵の暗号化形式を「rsa」（デフォルト）、「dsa」「ecdsa」「ed25519」から指定する|
|-b |作成する鍵のビット数を指定する（RSA形式の場合、デフォルトは2048bit|
|-a |d25519形式で生成する際のKDF（Key Derivation Function）ラウンド数を指定する。数が大きいと暗号の耐性が上がるが、処理に時間がかかるようになる|
|-f |ファイルを指定する（生成または読み出すファイルを指定）。ただし、併用するオプションによって意味が変化する（通常は鍵ファイル）|
|-p |パスフレーズを変更する（対話形式で元のパスフレーズを1回、新しいパスフレーズを2回指定する）。元のパスフレーズは「-P」オプション、新しいパスフレーズは「-N」オプションで指定可能|
|-N |新しく設定するパスフレーズを指定する|
|-P |元のパスフレーズを指定する|
|-C |コメントを指定する（デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除）|
|-E |鍵の指紋（fingerprint）を表示する際の形式を「sha256」（デフォルト）か「md5」で指定する|
|-i |暗号化されていない秘密鍵ファイルまたは公開鍵ファイルを読み出し、OpenSSH互換形式に変換してから標準出力に出力する（変換元のファイルは-fオプションまたは対話式で指定、-mオプションで変換元の鍵の形式を指定できる）|

<br>
<font color="Red">************************************************************************************
<br>******秘密鍵はどんなことがあっても自分のPCから外へ出すことはない。******<br>************************************************************************************</font>
<br>

## RaspberryPi上で.sshディレクトリを作る
RaspberryPi上で`/home/username/.ssh`ディレクトリを作る。
```
$cd
$mkdir /home/username/.ssh
```
ディレクトリのアクセス権限を設定する。(所有者のみディレクトリのrwxが可能)
```
$chmod 700 .ssh
```

<br>

## 公開鍵と秘密鍵ペアの作成と設定をする
RaspberryPi上で`authorized_keys`を作る。
```
$cd /home/username/.ssh
$touch authorized_keys
```
`authorized_keys`のアクセス権限を設定する。(所有者のみディレクトリのrwが可能)
```
$cd /home/username/.ssh
$chmod 600 authorized_keys
```
authorized_keysにid_rsa.pub公開鍵の内容をすべてCopy&Pasteする
```
ssh-rsa ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ ----- ---@-----------------------------------

```

<br>

## VisualStudioCodeのリモートエクスプローラーでSSH接続をする
VSCodeでSSH接続すると秘密鍵に対するパスフレーズを聞いてくるので入れれば接続できる。

<br>

## 参考文献
- NIFCLOUDーSSH公開鍵認証とは
https://pfs.nifcloud.com/navi/words/ssh.htm#:~:text=%E3%80%8C%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%80%8D%E3%81%A8%E3%81%AF,%E4%BF%9D%E7%AE%A1%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

- 【 ssh-keygen 】コマンド――SSHの公開鍵と秘密鍵を作成する
https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html
<br>