Raspberry Pi Zero 2 Wに公開鍵暗号方式でSSH接続する。

# 目次
[1.前回のまとめ](#1前回のまとめ)
[2.Raspberry Pi Zero 2 W](#2raspberry-pi-zero-2-w)
[3.Windows11からSSH接続(Tera Term)](#3windows11からssh接続tera-term)
[4.Windows11からSSH接続(Visual Studio Code)](#4windows11からssh接続visual-studio-code)
[5.まとめ](#5まとめ)

# 1.前回のまとめ
houwouです。
[前回の投稿](https://qiita.com/houwou/items/2388c80adba29212a3a5)でRaspberry Pi Zero 2 Wの初期設定を終えた。
今回はWindows11から公開鍵暗号方式でSSH接続を試みる。

# 2.Raspberry Pi Zero 2 W
まずはRaspberry Pi Zero 2 WでSSHの設定を有効にするためにLXTerminalを開く。
ターミナルの画面が表示されたら忘れずにおまじないから。
```terminal
sudo apt-get update
```
```terminal
sudo apt-get upgrade
```
セットアップの時にアップグレードしていたと思ったのにかなり時間がかかった。

ターミナルに下のように入力すると設定画面が表示される。
```terminal
raspi-config
```
`1. System Options`を選択。
![20231009_144239.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/c39432c3-b643-d663-cf79-505f32fa5fe2.jpeg)
`P2 SSH`を選択
![20231009_144307.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/fc88768f-dc9d-f80a-5abb-bb08fcb2e52d.jpeg)
セキュリティーリスクについての警告が表示されるが`<はい>`を選択。
![20231009_144329.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/3bf38e81-cd20-b6c3-5ceb-7c9e0ace096c.jpeg)
これでSSHが有効になった。
参考：[Raspberry Pi (OS)へとSSHを有効化してログインする方法](https://www.trade-tech-note.work/raspberry-pi-enable-ssh)

次に、Raspberry Pi Zero 2 Wのセキュリティ対策として`pi`ユーザーを削除する。
まずは新規ユーザー`[new_user]`を作成して`pi`と同じユーザー権限を与える。
私の場合まだファイルなんて一切ないので必要なかったかもしれないが、`/home/pi`のフォルダをすべて`/home/[new_user]`にコピーする。
`raspi-config`から自動ログインをオフにする。
ついでにGUIはもういらないのでコンソールで起動するように設定して`[new-user]`でログイン。
ここまで出来たら`pi`ユーザーを削除。
参考：[買ったらまず実施！RaspberryPiのセキュリティ対策](https://qiita.com/c60evaporator/items/ebe9c6e8a445fed859dc)

そのままついでにIPアドレスを調べておく。
```terminal
ifconfig
```
`wlan0`の`inet`にIPアドレスが表示されているのでメモ。
```
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (ローカルループバック)
        RX packets 29318  bytes 7792599 (7.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 29318  bytes 7792599 (7.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.XXX.XXX  netmask 255.255.255.0  broadcast 192.168.XXX.XXX
        inet6 XXXX  prefixlen 64  scopeid 0x20<link>
        ether XXXX  txqueuelen 1000  (イーサネット)
        RX packets 1235961  bytes 1416260210 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 443721  bytes 45834913 (43.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

# 3.Windows11からSSH接続(Tera Term)
準備が整ったのでRaspberry Pi Zero 2 WへのSSH接続を試みる。
Windows10の途中からOpenSSH Clientが標準機能になっているようなのでPowerShellやWindows Terminalなどを利用すれば特別なクライアントソフトなどなくてもSSH接続ができるようになっている。
でも私はバーガーパソコンにFedora Core 1をインストールして遊んでいたころから慣れ親しんでいる[Tera Term](https://ttssh2.osdn.jp/)を利用することにした。
参考：[windowsのsshクライアントはどれがいい？](https://ogatism.jp/post/windows-ssh-client/)
[[初心者向け?] Windows環境でOpenSSHクライアント(ssh.exe)を使う時に気を付けるべきこと](https://dev.classmethod.jp/articles/tips-for-openssh-client-on-windows-environment/)

Tera Termをインストールしたら起動して先ほど調べたIPアドレスを入力してポート番号を確認する。
![TeraTerm1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/d51016bb-51e6-6667-0267-8b98af8e2b9a.jpeg)
`ユーザー名`と`パスフレーズ`を入力して`プレインパスワードを使う`を選択した状態で接続。
![TeraTerm2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/d31bd5f8-2ead-27f1-9689-f5f11e25d781.jpeg)
無事に接続できた。
続いてTera Termを使って公開鍵と秘密鍵を生成する。
鍵の種類は`RSA`、ビット数は`2048`といずれもデフォルトのままで生成。
生成された公開鍵と秘密鍵を`C:/User/[user-name]/.ssh/`にでも保存しておく。（きっとどこでも問題ない）
参考：[公開鍵暗号方式とは？初心者でもわかる公開鍵暗号方式の基礎](https://udemy.benesse.co.jp/development/blockchain/public-key-cryptography.html)

生成された公開鍵をRaspberry Pi Zero 2 Wにアップロードする。
普通だったら`scp`コマンドで行うのだろうが、Tera Termならドラッグアンドドロップで直感的にアップロードできる。
初心者にはこういう機能がうれしい。
参考：[SSHでローカルファイルをアップロードの流れ](https://qiita.com/thiagomatsui/items/5835fc9c8c1257fe7b1e)

アップロードした公開鍵を`/home/[new-user]/.ssh/`に格納。
これで公開鍵暗号方式でSSH接続できるはずなので、再接続を試みる。
`ユーザー名`を入力したら`パスフレーズ`は空白のまま`RSA/DSA/ECDSA/ED25519鍵を使う`にチェックを入れて秘密鍵のパスを入力する。
![TeraTerm3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/8c850e0a-48a9-fc79-9a4a-ba6c6170964b.jpeg)
無事に接続できた。
![TeraTerm4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/e54dfabe-1439-250a-7db5-9c9154b10cc6.jpeg)
これでRaspberry Pi Zero 2 Wに電源以外のケーブル類を接続しなくても操作できるので、一つ煩わしさから解放された。

参考：[公開鍵認証によるSSH接続 - Tera Termの使い方](https://webkaru.net/linux/tera-term-ssh-login-public-key/)

# 4.Windows11からSSH接続(Visual Studio Code)
Tera Termも使いやすくて素晴らしいソフトなのだが、Raspberry Pi Zero 2 W上で開発を行うことを想定すると少し使いづらいのかなと思い至った。
なので開発環境として使い慣れている[Visual Studio Code](https://code.visualstudio.com/download)からSSH接続を試みた。

まずは拡張機能の`Remote - SSH`をインストールする。
![RemoteSSH.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/2b3dbe75-ccfa-2677-6699-4966de5c6544.jpeg)
次に`c:/Users/[user-name]/.ssh/config`を新規作成し以下のように入力。
```config:config
Host Raspberry_Pi_Zero_2_W
    HostName 192.168.XXX.XX
    User [new-user]
    Port XX
    UserKnownHostsFile /dev/null
    PreferredAuthentications publickey
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile /Users/[user-name]/.ssh/[private-key]
    IdentitiesOnly yes
    LogLevel FATAL
```
あとは左下の`><`ボタンを押して`Remote-SSH: Connect to Host...`から先ほど作成した接続先`Rasoberry_Pi_Zero_2_W`を選択する。
![VSCode.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559141/fbf2b343-6de6-7c01-b061-597aae368953.jpeg)
ターミナルも開いて無事に接続成功。
これなら開発しやすそう。

参考：[Visual Studio Code で Remote SSH する。](https://qiita.com/nlog2n2/items/1d1358f6913249f3e186)

# 5.まとめ
無事に公開鍵暗号方式でRaspberry Pi Zero 2 WにSSH接続できた。
配線の煩わしさからも解放され開発環境も整ったので、次回からはいよいよサーバー構築を行っていきたい。