Visual Studio Code から Rspberry Pi 3 Model B+ に Remote-SSH で接続した手順メモ

# 概要
ラズパイを使った電子工作をする際、今まではラズパイ側にsambaをセットアップして、Windows上のvscodeからファイル共有でソース編集を行っていました。
今回、新しいMacbookProを購入したので、Mac上のvscodeからRemote-SSHを使って接続できるように設定してみた手順のメモです。
（Windows10からもほぼ同様の手順で接続出来ますが一部違う部分もありますので詳しくはググってください。）

- ※この記事は多くの先人達の有益な記事を自分なりにまとめさせて頂いたものです。  
　[参考にさせていただいた記事](#参考にさせていただい記事)  
（ただしイラストについては自分の理解をよりわかりやすく整理する為に自分で作成しました。）
- ※2019年秋ごろ書いたものの、何となく公開するタイミングを逸してしまい下書きに放置してました。完全に旬を逃してますがせっかくなので公開します。情報が古いかもですがご容赦くださいm(__)m
- ※ラズパイZeroは残念ながらRemote-SSHでは接続出来ません。

# 環境
- Raspberry Pi 3 Model B+ (Rasbian Buster Lite)  
OSインストール後、WiFi接続と静的IPアドレスを設定済みとします。
- Macbook Pro (macOS Mojave)
- Visual Studio Code (1.39.2)

# 手順
## 1. ラズパイのSSHを有効化する
ラズパイのターミナルで下記のコマンドを実行。

```
~$ sudo raspi-config
```

[5 Interfacig Options] > [P2 SSH] > Yes でSSHを有効化する。

Macのターミナルから（普通のパスワード認証で）SSH接続出来ることを確認しておく。

```
~$ ssh [ラズパイのユーザー名]@[ラズパイのIPアドレス]
```

（例）`ssh pi@192.168.0.240`

## 2. MacからラズパイにSSH公開鍵認証で接続できるようにする

### 2-1. Mac上で公開鍵・秘密鍵のキーペアを作成する

```
~$ ssh-keygen
```

これで`/Users/[ユーザー名]/.ssh`にキーペアが作成されます。　　
（オプションを指定していないので、デフォルトのRSA方式2048bitの鍵が生成されます。）
- 公開鍵： `id_rsa.pub`
- 秘密鍵： `id_rsa`
イメージにすると下記のような感じです。
![ssh-step1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/4b43479d-b80d-1338-92eb-bd3d87d44699.png)

### 2-2. 作成した公開鍵をラズパイに登録する
つぎに、作成した公開鍵`id_rsa.pub`をラズパイに登録します。
Macのターミナルで下記のコマンドを実行します。
（SSHで接続して転送するので、パスワード認証で接続します。）

```
~$ ssh-copy-id [ラズパイのユーザー名]@[ラズパイのIPアドレス]
```

（例）`ssh-copy-id pi@192.168.0.240`
これで、Mac側で作成された公開鍵がラズパイの`~/.ssh`ディレクトリ内の`authorized_keys`というファイルに登録されました。
![ssh-step2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/a7d0297f-e6ad-1b87-1cd2-c15204bb8635.png)

（Windowsからだと`ssh-copy-id`コマンドが使えないので、`SCP`コマンドなどでファイルを転送するかUSBメモリなどでファイルをコピーしてから、手動で`authorized_keys`に追記します。）

### 2-3. 公開鍵認証でSSH接続出来ることを確認する
下記のコマンドで正常に接続できるか確認します。

```
~$ ssh -i ~/.ssh/id_rsa [ラズパイのユーザー名]@[ラズパイのIPアドレス]
```

（セキュリティ向上を目的として公開鍵認証でSSH接続する場合には、この後に通常のパスワード認証方式での接続を無効にする設定を行うのですが、今回は割愛します。）

## 3. Visual Studio Code に拡張機能をインストールする

下記の拡張機能をインストールします。

- Remote Development
![vscode-step3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/7daa1cfe-e409-1792-1b97-5f8b9165fa24.png)


## 4. SSH接続用のConfigファイルを記述する

Visual Studio Code のコマンドを利用して `~/.ssh/config` ファイルにSSH接続（公開鍵認証）の設定情報を書き込みます。
（ちなみに、この `~/.ssh/config` という設定ファイルは Visual Studio Code 専用の設定ファイルという訳ではなく、このファイルに設定情報を記述しておくと、ターミナルからも `ssh [HostName]` と実行するだけで、即座にリモート接続が出来るようになる設定ファイルです。）

### 4-1. 画面左下のアイコンをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/6b3b85e4-6b33-97d0-f8a2-f22cc6c4facd.png" width="30%">

### 4-2. Remote-SSH: Open Configuration File をクリック
![vscode-step4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/3ba3df84-af02-143a-f6db-031a9e3c054f.png)

### 4-3. ~/.ssh/config をクリック
![vscode-step4-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/43f4c35f-a678-c3b6-31ec-65e3ce4e2c3d.png)

### 4-4. 接続情報を記述します

```
Host [接続の際に用いる名前]
    HostName [接続するホスト名またはIPアドレス]
    User [ユーザー名]
    IdentityFile [秘密鍵へのパス]
```

（例）
![vscode-step4-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/fc49c694-5e41-6a35-f6ba-8c250fc35b45.png)

## 5. Visual Studio Code からラズパイへ接続する

### 5-1. 画面左下のアイコンをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/6b3b85e4-6b33-97d0-f8a2-f22cc6c4facd.png" width="30%">

### 5-2. Remote-SSH: Connect to Host をクリック
![vscode-step5-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/a4930bcb-e5fc-3766-ab66-bf8372a10ea3.png)

### 5-3. 接続したいHostをクリックします
configファイルに記述したHost名（下記の例では `Raspberrypi3B+`）が表示されますのでクリックすると接続されます。
![vscode-step5-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/bed2c040-27d8-7971-68b3-a12763ef9391.png)

### 5-4. 接続完了
画面左下に接続先名が表示されれば無事接続完了です！
<img width="391" alt="vscode-step5-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/28a877ab-f777-9929-5cc8-96c3f0b9daaa.png">
あとは通常のローカルでの作業と同じように「フォルダを開く」をクリックすると、リモート先のディレクトリが表示されますので目的のディレクトリを選択すればOKです！！
これでローカルと同じようにフォルダ内のファイル一覧を見ながら快適にコーディングが出来ますね！
<img width="587" alt="vscode-step5-5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/b0744e64-400b-b14c-f95c-038ad8918d9e.png">

また、接続された状態でターミナルを開けば自動的にリモートのカレントディレクトリが開いて、すぐにコマンド実行出来ますのでとっても便利です！
<img width="468" alt="vscode-step5-6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/3a57d455-41fb-1c2a-830f-0150b358f50f.png">

### 5-5. 接続を終了する
画面左下の接続先名をクリック
<img width="391" alt="vscode-step5-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/28a877ab-f777-9929-5cc8-96c3f0b9daaa.png">

コマンドパレットから「リモート接続を終了する」をクリックします。
<img width="592" alt="vscode-step5-7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139417/bb669618-4734-ca91-1d21-b3a654e04558.png">


# 参考にさせていただい記事
有益な情報を発信して下さる皆様いつも有難うございます。
- [Qiita - 【正式リリース版】VS CodeのRemote DevelopmentでRaspberry Pi内のファイルを編集する][link1]
- [Qiita - SSH公開鍵認証で接続するまで][link2]
- [Qiita - ~/.ssh/config による快適 SSH 環境][link3]
- [Qiita - VSCode公式の機能で、リモートサーバにSSHして編集する【Insiders Preview】][link4]
- [Qiita - ~/.ssh/configについて][link5]
- [ツール・ラボ - Raspberry Piに公開鍵認証を使ってssh接続する][link6]
- [あぱーブログ - コマンド１発！ssh-copy-id でSSH公開鍵を登録][link7]




[link1]:https://qiita.com/hukatama024e/items/9f96730381f0a34c6da6
[link2]:https://qiita.com/kazokmr/items/754169cfa996b24fcbf5
[link3]:https://qiita.com/oohira/items/7deae31469cfbbd740c1
[link4]:https://qiita.com/suzuki_sh/items/245b9817536eba808842
[link5]:https://qiita.com/passol78/items/2ad123e39efeb1a5286b
[link6]:https://tool-lab.com/2013/11/raspi-key-authentication-over-ssh/
[link7]:https://blog.apar.jp/linux/5336/