やりたいこと
- 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 でログアウトする.

.ssh フォルダが自動生成され,その中に入っているid_rsa が秘密鍵,
id_rsa.pub が公開鍵,です.
ためしにデフォルト状態で生成した鍵の素性は以下の通り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(モニターやキーボード類を準備しなくてよい)環境を構築できました.