Help us understand the problem. What is going on with this article?

【ヘッドレス】Raspberry Pi 3 セットアップ for macOS

散々同様の記事は投稿されていますが,備忘録として書き残します.
今回は,Raspberry Piにヘッドレス(=ディスプレイなし)でセットアップします.(リンクの一部にアフェリを含みます.)

環境など

  • 作業 PC: MacBook Pro (macOS Mojave 10.14.5)
  • 本体: Raspberry Pi 3 MODEL B (Raspberry Pi 3 MODEL B+ でも同様でした)
  • SDカード: TOSHIBA EXCERIA microSDHC16GB Class10 UHS-1対応 最大読込速度48MB/s 防水/耐X線 海外パッケージ品 THN-M301R0160A4
    • 用途的に容量は少なくてよかったので,16GBを選択しました.
    • この商品は日本国内でのサポートは受けれないので注意しましょう.
  • 書き込むOS: Raspbian Buster Lite (2019-06-20)
    • Raspbian Buster with desktop and recommended software でも Raspbian Buster with desktop でも,Stretch 系でも,流れは変わりません
      • Raspbian * Lite: 最小限のイメージ.CUI 環境.
      • Raspbian * with desktop: デスクトップ付きイメージ.
      • Raspbian * with desktop and recommended software: デスクトップ付き,推奨ソフトウェア入り.

やること

  • OSのダウンロード
  • OSをSDカードに書き込む
  • SSHの有効化,Wi-Fiの設定
  • Raspberry Piの起動
  • Raspberry Piの設定

OSのダウンロード

今回は,Raspbian (Raspbian Buster Lite) をインストールする.1
Download Raspbian for Raspberry PiからRaspbian Buster LiteをDownload ZIPをクリックして,ダウンロードするか,$wget https://downloads.raspberrypi.org/raspbian_lite_latestでダウンロードしても良い.
ダウンロードは結構時間がかかるので,気長に待つ.

スクリーンショット 2019-07-11 21.00.57.png

ダウンロードが完了したら,一応ファイル破損がないか確かめる:

$ openssl sha256 2019-06-20-raspbian-buster-lite.zip
SHA256(2019-06-20-raspbian-buster-lite.zip)= 9009409a9f969b117602d85d992d90563f181a904bc3812bdd880fc493185234

一致しているので,大丈夫ですね👌.

OSをSDカードに書き込む

まずはzipファイルの解凍する:

$ unzip 2019-06-20-raspbian-buster-lite.zip

その後,純正の変換器(USB-C Digital AV Multiportアダプタ)と,サンワサプライのUSB2.0カードリーダ(ADR-ML158K)を使って,microSDHCを挿入する.
(もちろん別ので良い)

そしたら,SDカードのマウント先を確認する:

$ diskutil list

次にSDカードをFAT32でフォーマットする(今回はSDカードのマウント先が/dev/disk2という想定):

$ diskutil eraseDisk FAT32 RPI /dev/disk2

フォーマット後,ddコマンドでの書き込みのため,SDカードをアンマウントする:

$ diskutil unmountDisk /dev/disk2

最後に,ddコマンドでSDカードにOSイメージを書き込みます:

$ sudo dd bs=1m if=2019-06-20-raspbian-buster-lite.img of=/dev/rdisk2 conv=sync

SSH,Wi-Fiの設定

まずは,cdコマンドで移動:

$ cd /Volumes/boot

SSHの有効化

起動時にsshを有効にするため,書き込んだSDカードの最上位にsshという名前の空ファイルを作成する:

$ touch ssh

Wi-Fiの設定

書き込んだSDカードの最上位に,wpa_supplicant.confという名前のファイルを作成する.
このファイルは,起動時に自動でRaspbian上の/etc/wpa_supplicant/wpa_supplicant.confを上書きするようになっている.
上書き後,SDカードの最上位に作成したファイルは削除される.

Wi-Fiのパスフレーズは平文でも保存できるが,256bitのハッシュ化されたキーを保存した方が良い.
キーはWPA key calculation: From passphrase to hexのページにアクセスし,Network SSIDとWPA passphraseを入力し、Calculateボタンをクリックすると得ることができる.

WPA key calculation

bac3cdf26d42c3a61fb858ef0295a0166e94f84dbabc1088bfa090cef3cb1dcbのようなキーが得られる.
これを元にファイルを作成する:

$ nano wpa_supplicant.conf
wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="abc"
    psk=bac3cdf26d42c3a61fb858ef0295a0166e94f84dbabc1088bfa090cef3cb1dcb
}

SDカードの取り外し

設定が終わったら,以下を実行したのち,SDカードを取り外す:

$ cd
$ diskutil eject /dev/rdisk2

Raspberry Piの起動

SDカードを取り外したら,Raspberry Piに挿入し,電源を接続する.

電源接続後,sshコマンドでRaspberry Piに接続する:

$ ssh pi@raspberrypi.local

ユーザpiの初期パスワードはraspberry

※注意

過去に別の raspberrypi.local に接続したことがあると,以下のようなエラーが出る場合がある.

$ ssh pi@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address fe80::f88c:658:xxxx:xxxx%en0
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:0E0bGTNgBRDx/HvSCguEACBoAG8OaF+YlsoPlMMRuMs.
Please contact your system administrator.
Add correct host key in /Users/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/user/.ssh/known_hosts:xx
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.

これは,前に接続した raspberrypi.local と fingerprint が一致しておらず,中間者攻撃の可能性があるため接続がキャンセルされたことを表す.

この場合は下のコマンドで前回までの fingerprint を削除すると問題なく接続できる.

$ ssh-keygen -R raspberrypi.local
$ ssh pi@raspberrypi.local

パスワードの設定,ユーザの追加

ログインできたら,まずはユーザpiのパスワードを変更する:

$ passwd

合わせて,ユーザrootのパスワードを設定する:

$ sudo passwd

また,可能であれば,セキュリティのため,作業用に別のユーザを作ることをオススメする.
ユーザを追加する:

$ sudo useradd --groups adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio -m yk

グループはユーザpiのグループを参考に設定した.
ユーザpiのグループの確かめ方は次の通り:

$ groups pi

追加したユーザにもパスワードを設定する:

$ sudo passwd yk

最後にユーザpiを無効化し,切断する:

$ sudo passwd --lock pi
$ exit

以降の作業は新しく追加したユーザで行う:

$ ssh yk@raspberrypi.local

流石にshでの作業は辛いのでシェルをbashに変更する:

$ sudo chsh -s /bin/bash yk

変更後は一旦切断してから接続し直す:

$ exit
$ ssh yk@raspberrypi.local

Raspberry Piの設定

初期設定

まずは,初期設定を行う:

$ sudo raspi-config
  1. 「8 Update」を選択し,ツール自体を最新にしておく.
  2. 「2 Network Options」の「N1 Hostname」を選択し,ホスト名を設定する.
  3. 「4 Localisation Options」の「I1 Change Locale」を選択し,言語の設定をする. ここでは,あくまで私の設定を紹介する. まぁ,趣味の問題なのでみなさん思い思いに設定してください.
    1. 「en_GB.UTF-8 UTF-8」でスペースキーを押し,選択解除
    2. 「en_US.UTF-8 UTF-8」でスペースキーを押し,選択
    3. 「ja_JP.UTF-8 UTF-8」でスペースキーを押し,選択
    4. Tabキーを押し,「Ok」を選択
    5. 「ja_JP.UTF-8」を選択し,「Ok」を選択
  4. 「4 Localisation Options」の「I2 Change Timezone」を選択し,タイムゾーンの設定をする.
    1. 「Asia」,「Tokyo」を選択
  5. 「4 Localisation Options」の「I4 Change Wi-fi Country」を選択し,使用する国を設定する.
    1. 「JP Japan」を選択
  6. 「4 Localisation Options」の「I3 Change Keyboard Layout」を選択し,キーボードの設定をする.(必要であれば.今回はパス.)
  7. 「Finish」を選択して初期設定は終了

アップデートの実施

とりあえず,さっさとアップデートしてしまう:

$ sudo apt update       # パッケージリストの更新
$ sudo apt upgrade      # パッケージの更新
$ sudo apt dist-upgrade # OSのアップグレード
$ sudo rpi-update       # ファームウェアの更新
$ sudo reboot           # 反映のための再起動

SSHの設定

鍵でログインする環境にしたい人のみ実行してください。なんのことかわからない方は次のファイヤウォールの設定まで飛ばすことをお勧めします。

認証されたキーのみでログインできるように,rootではログインできないように変更する:

sudo nano /etc/ssh/sshd_config
/etc/ssh/sshd_config
- #PermitRootLogin prohibit-password
+ PermitRootLogin no
/etc/ssh/sshd_config
- #PubkeyAuthentication yes
+ PubkeyAuthentication yes
/etc/ssh/sshd_config
- #PasswordAuthentication yes
- #PermitEmptyPasswords no
+ PasswordAuthentication no
+ PermitEmptyPasswords no
/etc/ssh/sshd_config
- UsePAM yes
+ UsePAM no

そしたら,実際に公開鍵を書き込む

公開鍵を書き込む

スマートに書き込む
手元のPCの環境から
$ ssh-copy-id -i ~/.ssh/id_ed25519 yk@raspberrypi.local
大人しくシンプルに書き込む
$ mkdir ~/.ssh
$ nano ~/.ssh/authorized_keys
~/.ssh/authorized_keys
+ ssh-ed25519 xxxxxxxxx xxx@xxx.local

パーミッションを整える:

$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys

公開鍵を登録したら…

反映のため,サービスの再起動:

$ sudo systemctl restart ssh

設定にミスがないか確認するため,新しいターミナルでログインテストする.
接続中のを切断すると,設定にミスがあった際に,ログインできず修正できなくなるので注意.

ファイヤウォールの設定

設定しないのは楽でいいですが,やはりセキュリティー的には設定するべきですので,設定します.

iptablesがいちばん有名だとは思いますが,設定がめんどくさい複雑なので,今回はufw (Uncomplicated FireWall)を使用する.

インストール:

$ sudo apt install ufw

ファイヤウォールの状態を確認:

$ sudo ufw status
Status: inactive

インストールした直後は無効になっている.

ファイヤウォールの設定の基本は,
1. 外部からの接続は受け付けない
2. 必要なポートの通信だけ許す
です.
それに従い,今回はローカルのssh接続のみ許可するように設定します:

$ sudo ufw default deny
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
$ sudo ufw allow proto tcp from 10.0.0.0/8 to any port 22 # 我が家はクラスAにしているだけなので環境に合わせて設定してください.
Rules updated
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       10.0.0.0/8

これで共通のセットアップは完了です.
あとは,私はzshでも入れてから,色々遊んでみます.

参考


  1. まぁ,今回の私の用途ではGUIはいらないので… 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした