Raspberry Pi インストールからHeadless環境構築まで


やりたいこと

  • Raspberry Pi の OS をインストール
  • セキュリティ強化
  • SSHやVNCで接続できるようにする

1. Raspberry Pi OS インストール

https://www.raspberrypi.com/software/ より Download for Windows をクリックして,ダウンロード.

ダウンロードが完了したら,ファイルを実行する.

OS選択ボタンを押して,RaspberryPi OS(32-bit) を選択

次にストレージ選択ボタンを押して,インストールするSDカードを選択する

最後に,WRITEボタンを押してイメージの書き込みを開始する.

本当にSDカードに書き込んでよいのか聞かれるので, Yes.

ラズベリーパイが焼けるまで待ちます.

書き込むマシンの性能にもよりますが,おおよそ5分程度かかります.

無事に焼きあがっていれば,下記のようなダイアログが出てるので,

ディスクを取り出します.ディスクを取り出すときは,右下の

焼き上がったSDカードをラズパイに差し込みます.

ラズパイにモニターと電源を接続します.

このとき,電源は,2.5A 以上の出力のものを使うこと,

また忘れやすいのですが,ケーブルも2.5A以上の出力用の
(内部抵抗の低い)ものを使いましょう.

私は,800mA の電源を使っていたため,
Wi-Fi(消費電力多め)を使った瞬間に電源が落ち,
無駄に時間を浪費しました.(原因が分からず悩み時間でorz

起動を確認したら,Next を押します.

ロケーションの設定です.時刻や言語の設定になります.

私はUSキーボードしか使わないので,
“Use US Keyboard” にもチェックをいれました.

デフォルトで作成されるユーザアカウント名 pi のパスワードを設定します.

タスクバーの位置について聞かれますが,無視します.Nextで.

WiFiの設定です.繋げたいSSIDを選択し,パスワードを入力します.

ネットに繋がったら,ソフトウェアアップデートをするので,Nextを押します.

最後に再起動します.

2. セキュリティ強化

  • pi ユーザの削除 : デフォルトのアカウントのままだと,パスワードクラックを受けやすくなります
  • オートログインの無効化
  • root のパスワードを設定しておく

の3点を行います.

pi ユーザの削除

pi をただ削除するだけだと,ログインできなくなってしまうので,
新規にアカウントを作成します.ここでは mypi を新ユーザとします.

ターミナルを立ち上げます.

sudo adduser mypi

piと同じ権限をmypiに付与するため,まず pi に与えられた権限を確認.

groups pi

pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,lpadmin の権限があることが確認できたので,mypiに付与します.

sudo usermod -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio,lpadmin mypi (←カンマで区切り,スペースは入れない

pi ユーザのホームディレクトリの中身を mypi へコピー

sudo cp -r /home/pi/* /home/mypi

最後に piユーザでログインできないようにします.
pi のアカウント有効期限を過去のものにするコマンドを使います.

sudo usermod –expiredate 1 pi

再起動して,mypi でログインし直します.

オートログインの無効化

root のパスワードの設定

sudo passwd root

3. SSHやVNCで接続できるようにする

SSHやVNCはネットワークの設定をするため,
PCとラズパイの位置付けで設定内容が変わってしまうのですが,
話をややこしくしないために,まずは同一LAN内にいるとします.

具体的には,下記のような感じです.
PCもラズパイも同じルータからIPアドレスをもらってます.

それではVNCの設定から行っていきます.
VNCは,ラズパイのGUI をLAN内から制御できる仕組みです.
リモートデスクトップとも呼ばれます.

インターフェース → VNC, SSHの有効化します.
SSH はCUIベースのリモート接続ツールです.
後ほどSSH でも接続できるようにするので,有効化しておきましょう.

デスクトップ右上のVNCサーバのアイコンをクリックして
出てくるIPアドレスをメモしておきます.

続いて,PC側に VNC クライアントをインストールします.

https://www.realvnc.com/en/connect/download/viewer/

ダウンロードが完了したら,アプリを立ち上げ,
「New Connection」を選択します.

先ほど,メモしたIPアドレスを入力します.

ダブルクリックで起動します.

ディスプレイをつながなくても,VNCだけで運用できるように,
あらかじめ画面の設定をしておきます.

PC側のモニタの解像度に合わせて,Headless Resolution の値を変更します.
設定変更後,再起動を促されるので,再起動します.

※注:上記画像では1280×720 になってますが,実際は1920×1080にしました.

再起動すると,画面がおかしなことになっていることが確認できます.

ターミナルを開き,sudo vi /boot/config.txt で設定ファイルを編集します.
17, 18行目の先頭の# を外して,以下のように書き換えます.

framebuffer_width=1920
framebuffer_height=1080

また,62 行目をコメントアウトしておきます.

この部分,ネットには,同設定ファイルの 62行目の末尾に
「,nocomposite」を追記するやり方もありますが,
それだと,HDMI接続の場合にディスプレイに映らなくなります.

万が一,VNCが繋がらなくなった場合,
ディスプレイを繋いでのレスキューができないということです.

なので,繰り返しになりますが,62行目はコメントアウトで対応しましょう.

なお,最悪,VNC/HDMI 共に繋がらなくなったら,
microSDをラズパイから抜き,PCに入れて,SDカードドライブから
config.txt をメモ帳などで修正し,再度ラズパイに入れれば,
HDMI接続できるようになります.

上記の設定ファイルの書き換えが終わったら,再起動します.
以上でVNCの設定は終わりです.

次にSSH の設定です.

SSHの接続のやり方には主に2つあり,

  • パスワード認証:id, pass を入力して一致したら認証する
  • 公開鍵認証:クライアント側で,錠前(公開鍵)と鍵(秘密鍵)を用意しておき,あらかじめ錠前をサーバーに渡しておき,その錠前に鍵を使って認証する

デフォルトは,パスワード認証になっているが,セキュリティ的に公開鍵認証に比べて弱いので,公開鍵認証へ変更する.

まずデフォルト状態のパスワード認証で接続できるか,をテストします.

Windows のPowerShell を立ち上げて,ssh mypi@192.168.1.3 と入力.

初回だけ「今までに繋げたとこじゃないけど本当に繋げますか?」と聞かれるので,yes.

パスワードを入力するとログインできることを確認.

exit でログアウトする.

続いてPowerShell内 で公開鍵・秘密鍵を生成します.
.ssh フォルダが自動生成され,その中に入っているid_rsa が秘密鍵,
id_rsa.pub が公開鍵,です.
PS C : users > ssh-keygen 
-t 
rsa 
eneratina vate rsa kev Dai r 
096 
‘Enter file in which to save the kev (c: users . ss rsa . 
Enter passphrase (empty tor no passphrase) : 
Enter. same oassohrase aaain• 
our Identifi cation has been save nn c: .ssh/id_rsa. 
our public key has been saved in c: 
he key fingerprint is: 
SHA256:- 
he key’s ranQ)tnart image is: 
[RSA 4096]—-+ 
ps C. 
rsy9LAPTOP-FZE+F4F.; “><br> <br>ssh-keygen コマンドで RSA暗号(公開鍵と秘密鍵の生成ロジック)を指定すると,デフォルトで3072bit の暗号強度となります.<br>-b 4096 と指定することで,4096bit へ変更できます.<br><br>ssh-keygen -lf id_rsa で出来あがった鍵の素性を確認できます.<br><br><img decoding=

ためしにデフォルト状態で生成した鍵の素性は以下の通り3072bit になってます.




出来上がった公開鍵(id_rsa.pub)をRaspberryPi へ送ります.

まず,SSHでRaspberryPi に入り,送り先のフォルダ .ssh をホームディレクトリに作ります.
Linuxは外部から公開鍵を使ったSSH接続を試みられた場合,
このフォルダ内にある公開鍵を使います.

終わったら, SCPで公開鍵を送ります.

その後,autorized_keys に追記(初めての場合は自動で新規作成されるし,公開鍵(id_rsa.pub)は削除します.

フォルダとファイルのアクセス権限を変更します(chmod).

  • authorized_keys ファイルを管理者のみ読み書きできるよう 600 に
  • .ssh フォルダは管理者のみが実行と読み書きができるよう700に

最後に,sudo vi /etc/ssh/sshd_config で,

・rootユーザでのログインの禁止

・パスワード認証ssh を無効化して,公開鍵認証sshのみ許可

を行い,SSHサービスを再起動し,

ログアウトします.

最後に,クライアント側からSSH接続できるか確認します.

明示的に 秘密鍵を指定する場合は,
ssh -i id_rsa mypi@192.168.1.3 のようにします.

以上で,Raspi にHeadless(モニターやキーボード類を準備しなくてよい)環境を構築できました.