Raspberry Ri Zero WH 初期設定


### 概要
マウス、キーボードなしでMacOSからラズパイにssh接続する環境構築を目指します。

【動作環境】
ホストOS/macOS
端末/Raspberry Pi Zero WH
OS/Raspbian Buster Lite

### ホスト側
1. ホスト側にSDカードを差し込みます。

2. SDカードに書き込むOSをダウンロード
今回DLするのはraspbianのRaspbian Buster Lite イメージは以下のリンクからDL
https://www.raspberrypi.org/downloads/

3. イメージの書き込み
<pre>
$diskutil list
$diskutil unmountDisk /dev/disk2
$sudo dd bs=1m if=2019-09-26-raspbian-buster-lite.img of=/dev/rdisk2
</pre>
***unmountDiskする場所は必ず$diskutil listで表示されたラズパイの箇所を指定してください。***
if=にはイメージファイルのパスを設定。

画面に何も表示されませんが以下で進行状況が確認できます。
<pre>
ctr + t
</pre>

4.wifi接続設定

/Volumes/bootのディレクトリ配下に空のsshファイルを作成。
<pre>
$cd /Volumes/boot
$touch ./ssh
</pre>

wifiの接続設定
<pre>
$vi ./wpa_supplicant.conf
</pre>

wpa_supplicant.confの中身
<pre>
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="XXXXXXXX"
    psk="XXXXXXXXX"
}
</pre>

wpa_supplicant.confファイルには使用しているwifiルーターの設定を書き込みます。
ssidにはwifiのSSID名、
pskにはwifiのパスワードを設定します。

5.ラズパイにSSHログイン
<pre>
$ssh pi@raspberrypi.local 
password raspberry
</pre>
ホスト名はraspberrypi.localで接続できます。
yesを押した後にはパスワードを訊かれますが初期パスワードはraspberryになります。

エラーが出る場合は、以前にラズパイにssh接続してフィンガープリントが残っているので削除しましょう。
<pre>
$ssh-keygen -R raspberrypi.local
</pre>

### ラズパイ側
いよいよラズパイ側にやってきました。
ここからはラズパイ側でいろいろと設定していきましょう。
主に最低限のセキュリティを設定していきます。

1.ユーザーの作成

ユーザー名はyukarinとします。
<pre>
$sudo adduser yukarin
password  XXXXXX
</pre>
yukarinをpiと同等のグループに追加します。
<pre>
$groups pi
pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio
</pre>

上のグループをyukarinに付与します。
<pre>
sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio yukarin
</pre>

確認
<pre>
$groups yukarin
pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio
</pre>

2.公開鍵と秘密鍵の設定

【ホスト側】

ホスト側で公開鍵と秘密鍵の作成をします。

<pre>
$ssh-keygen -t id_rsa_raspberry
</pre>
Enterは３回押しても構いません。id_rsa_raspberryの箇所は好きな名前を設定。

<pre>
$ls -la ~/.ssh
1843 10 12 23:34 id_rsa_raspberry
413 10 12 23:34 id_rsa_raspberry.pub
</pre>
id_rsa_raspberryが秘密鍵、
id_rsa_raspberry.pubが公開鍵となります。

id_rsa_raspberry.pubの内容を控え、ラズパイ側に登録していきます。

【ラズパイ側の設定】

ラズパイ側に再びssh接続

<pre>
$ssh yukarin@raspberrypi.local
</pre>

<pre>
mkdir ~/.ssh
vi ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
</pre>

ホームディレクトリに.sshというファルダを作成し、
authorized_keysファイルに先ほどホスト側で控えたキーをコピペ。
~/.sshは700
authorized_keys600のパーミッションに設定します。

ラズパイ側に公開鍵を設定できたので、ホスト側で鍵を使って接続できるか確認します。
***この確認は絶対に行うようにしてください。***

<pre>
$exit;
</pre>

ホスト側に戻ってきました。秘密鍵を使ってssh接続してみます。

【ホスト側】

<pre>
$ssh -i ~/.ssh/id_rsa_raspberry -p 22 yukarin@raspberrypi.local
</pre>

-iの引数に秘密鍵のパス、sshの-pの引数は22

<pre>
yukarin@raspberrypi:~ $
</pre>

秘密鍵を使ってsshできましたね!!

3.sshd_configの設定

セキュリティを高めるため、sshd_configに設定を書き込んでいきます。

まずはバックアップをとります。
<pre>
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.back
</pre>

<pre>
$sudo vi /etc/ssh/sshd_config
</pre>

sshd_configに追記
<pre>
PermitRootLogin no　　　　　　## rootのログインを禁止
PasswordAuthentication no   ## password指定でのログインを禁止
PermitEmptyPasswords no　　　## passwordなしでのログインを禁止
PubkeyAuthentication yes    ## 公開鍵でのログイン
</pre>

注意して欲しいのが
PasswordAuthentication noの設定。
鍵を準備するまえにこの設定を行うと、ssh接続で入れなくなってしまうので
必ず鍵認証が確認できてからnoにしてください。前述で鍵認証できるか確認したのはそのためです。

sshd_configの設定を反映させるため再起動

<pre>
$sudo /etc/init.d/ssh restart
</pre>

最後にラズパイの最低限の設定をしていきます。

【パッケージ管理の更新】
<pre>
$sudo apt-get update -y
$sudo apt-get upgrade -y
$sudo apt-get dist-upgrade -y
</pre>

【タイムゾーン】
<pre>
$sudo timedatectl set-timezone Asia/Tokyo
$exit;
</pre>

【ロケールの変更】
<pre>
sudo raspi-config nonint do_change_locale ja_JP.UTF-8
$exit;
</pre>