Windows10からRaspberryPiにカンタンSSH接続

#はじめに
PCの遠隔操作方法には様々なものがありますが、
GUIでの接続を前提としたものは、RDPやVNC
CUI（コンソール）での接続を前提としたものは、今回取りあげるSSHが代表的です。

2018年以降のWindows10ではOpenSSHというSSH接続ソフトがプリインストールされ、
[コマンドプロンプトで簡単に実行できるようになった](https://www.onebizlife.com/windows10-ssh-client-1980)ので、
RaspberryPiのお手軽遠隔操作を試してみます。

なお、**SSH接続には**
**・パスワード認証**
**・公開鍵認証**
の2種類があるので、本記事ではその2種類での手順両方を紹介します。
（セキュリティ的には、後者の公開鍵認証がより推奨されます）

#必要なもの
・RaspberryPi本体
・上記と同じネットワークにつながったWindows10 PC


#パスワード認証の場合：手順
##①下準備
セキュリティ対策のため、[こちらの記事](https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc)の③「ポート番号変更」まで実行してください

##②RaspberryPiのIPアドレス確認
※この操作のみRaspberryPi側で実行します
RaspberryPiで

```
ifconfig
```
と打つと

```
wlan0: flags=   <UP,BROADCAST,RUNNING,MULTICAST>  mtu 
        inet 192.168.***.***以下続く
```
というような表示が出てきます。
このinetの右に記載されている数字がRaspberryPiのIPアドレスとなるので、
メモしておいてください（IPを固定化したい場合は[こちら](http://yurugadge-channel.com/article/185920110.html)参照）

##③SSH接続の実行
ここからはPC側の操作です。
###OpenSSHのインストール確認

```
ssh
```
と打って、

```
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]
```
のような表示が出れば成功です。

```
'ssh'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
```
と出た場合は、OpenSSHがインストールされていないので
[こちら](https://www.onebizlife.com/windows10-ssh-client-1980)を参考にインストールしてください。

###SSH接続の実行
下記コマンドを実行します。

```
ssh RaspberryPiのユーザ名@RaspberryPiのIP -p SSH用のポート
```
RaspberryPiのユーザ名およびSSH用のポートは「①下準備」で設定した値
RaspberryPiのIPは②で確認したIPアドレスとなります。

RaspberryPiのパスワードが求められるので入力して、

```
[RaspberryPiのユーザ名]@raspberrypi:~ $
```
というようなLinuxコマンドが出てくれば成功です。
これでRaspberryPiをSSHで操作することができます。

終了したい場合は

```
exit
```
で終了できます。

以上がパスワード接続での接続法です。


#公開鍵認証の場合：手順
##①SSH公開鍵認証の確立
セキュリティ対策も兼ねて、[こちらの記事](https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc)の④「SSHを公開鍵認証に変更」まで実行してください
（少し長いですが、セキュリティホールを作らないためにも根気強く実施頂ければと思います）

##②認証設定の保存
上記①により公開鍵認証でのSSH接続ができますが、

```
ssh [RaspberryPiのユーザ名]@[RaspberryPiのIP] -i [秘密鍵のパス] -p [ポート番号]
```
という長いコマンドを毎回打つ必要があり、手間がかかります。
そこで、.sshフォルダにconfigファイルを作る事で、

```
ssh [ホスト名]
```
という短いコマンドでSSH接続できるようになります。

VSCodeのような開発ツールでRaspberryPi内のファイルを編集したい場合にも、
このconfigファイルが必要となるので、作っておいて損はないと思います。

###configファイルの作成
下記のようなファイルをメモ帳で作成し、「config」という名前で保存します。
保存先の.sshフォルダは、デフォルトでは
「C:\Users\\[Windowsのユーザ名]\\.ssh」
となります。
![config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/6c48aaa9-446a-c776-1d2a-dc54cbd5c534.png)

設定によってはテキストファイルとして保存され、
「config.txt」となりますが、この場合も名前の変更で.txt拡張子を削除すれば問題ありません。
また、ホスト名は任意で大丈夫です。

###SSH接続のテスト
下記コマンドを実行し、

```
ssh [ホスト名]
```
公開鍵認証のパスワードが求められるので入力し、

```
[RaspberryPiのユーザ名]@raspberrypi:~ $
```
というようなLinuxコマンドが出てくれば成功です。

終了したい場合は

```
exit
```
で終了できます。

以上でWindows10からRaspberryPiへのSSH接続は完了です！
お疲れさまでした！

##参考：config作成後のSSHによるファイル送信コマンド

```
scp [送信したいファイルのパス] [RaspberryPiのユーザ名]@[RaspberryPiのホスト名]:[送信先のパス]
```
で送信できます。
例（PCのD:\tmpにあるtmp.txtを、ユーザ名"piuser"、ホスト名"raspi"のRaspberryPiのホームディレクトリに送信）

```
scp D:\tmp\tmp.txt piuser@raspi:/home/piuser
```

##参考：公開鍵認証のパスワード変更方法
クライアント（上記ではWindowsPC）側で、

```
ssh-keygen -p
```
で公開鍵認証のパスワードを変更できます