ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

Raspberry Piをヘッドレスモードで利用する

モニター、キーボードなしでMacでなんとかする方法を教えてもらったので追記しました。

Raspberry Piにモニター、キーボードなしで接続することを「ヘッドレスモードで利用」すると言うようです。 Zeroconf (Mac OS XではBonjourLinuxではavahi-daemon) により実現しているものです。

www.aymerick.com

WindowsマシンとRaspberry Piを接続したいときは、次を参考にしてください。

raspi.seesaa.net

しかし、Raspberry Piで最もよく利用されている最近のRaspbianでは、セキュリティを考慮してデフォルトではSSHサーバーが起動しないようになりました。

www.raspi.jp

従って、SDメディアにRaspbianを書き込んでMacRaspberry Piを有線LANケーブルでつないでもssh接続はできないのですが、次の手順を実施するとできるようになります。ちなみにRaspbian以外のOSでは多分、クライアントとRaspberry Piを直結するだけで接続可能です。

キーボードとモニターを用意できる場合

(0) Raspbianをダウンロード

(1) SDにRaspbianを書き込み

イメージの書き込み方法

(2) MacからSDメモリーを取り外す

(3) Raspberry PiにSDメモリーを取り付ける

(4) モニター、キーボードを接続

(5) 電源を接続して起動

(6) ユーザーpi/パスワードraspberryでログイン

(7) SSHを有効化するために以下を実行

$ sudo touch /boot/ssh

キーボードとモニターを用意できない場合

(0) Raspbianをダウンロード

(1) SDにRaspbianを書き込み

イメージの書き込み方法

(2) Macでboot/sshを作る

$ touch /Volumes/boot/ssh

(3) MacからSDメモリーを取り外す

(4) Raspberry PiにSDメモリーを取り付ける

(5) 電源を接続して起動

起動後の設定(共通)

(1) LANケーブルでMacRaspberry Piを接続

(2) RasPiの設定をする

$ sudo raspi-config

(3) 以下を実行

  • Expand Filesystem
  • Change User Passsword(推奨)
  • reboot

(4) MacからSSH接続可能になる

sshコマンドでraspberrypi.localに接続

% ssh pi@raspberrypi.local

The authenticity of host 'raspberrypi.local (fe80::fbcb:b1c2:db6a:793a%en0)' can't be established.
ECDSA key fingerprint is SHA256:XXX.
Are you sure you want to continue connecting (yes/no)?  yes
Warning: Permanently added 'raspberrypi.local,fe80::fbcb:b1c2:db6a:793a%en0' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password:  ←パスワードを入力(初期パスワードはraspberry)

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Nov 25 17:57:17 2016

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $
(接続できた)

(5) ホスト名を変更

デフォルトのホスト名はraspberrypi.localなので別の名前に変えてみましょう。

$ sudo hostnamectl set-hostname raspberrypi1.local
$ sudo nano /etc/hosts
127.0.1.1       raspberrypi1

(6) 変更を保存して閉じる

  • 保存 [CTRL]+[O] → [Enter]
  • 閉じる [CTRL]+[X]

(7) 再起動

以上で新しいドメイン名.localでSSHアクセスできる。

% ssh pi@raspberrypi1.local

このあとの作業

とはいえ、このままではどちらにしろ外のネットワークと接続できないので、パッケージのインストールとかアップデートができません。なので、既存のネットワークにRaspberry Piを接続してIPアドレスを設定します。IPアドレスの固定化の方法は以下の手順を参考に。

qiita.com

有線LANの方にIPアドレスを割り当てるもよし、Wi-Fiの設定をするもよし。ちなみにRaspberry Pi 3のWi-Fiは2.4GHz帯の方にしか接続できないので注意。

なお、有線及び無線LANネットワークから切断して、クライアントとRaspberry Piを直結するとIPアドレスを設定していても引き続きドメイン名.localSSHアクセスできます。

Linux(CentOS 7)と直結したRaspbianに接続する方法

WindowsMacIPv4 Allの働きにより、任意のネットワークに接続されていないと適当なアドレスを振る仕様になっているため、LANケーブルで直結するとアクセスできます。しかし、LinuxではデフォルトではIPv4 Allが働きません。

以下の手順でそれぞれのサーバーで適当なネットワークIPアドレスを割り振った上でLANケーブルで直結するとサーバーにSSH接続できるようになるようです。

(0) 一旦、それぞれのサーバーを直結するのをやめて、インターネットに接続するように設定を変える

(1) クライアントとしてCentOS7(おそらくFedoraも)を使う場合、NetworkManagerからnetworkサービスに切り替える

(2) avahi-autoipdパッケージをクライアント、サーバーにそれぞれインストール

(3) avahi-dnsconfdとavahi-toolsパッケージをクライアントにインストール

(4) avahi-dnsconfdサービスを起動する

# systemctl enable avahi-dnsconfd && systemctl enable avahi-dnsconfd 

(5) クライアントの/etc/nsswitch.confのhostsの設定に[NOTFOUND=return]の手前にmdns4を記述する

# nano /etc/nsswitch.conf
...
hosts:          files mdns4 [NOTFOUND=return] dns
...

(6) クライアント、サーバーでavahi-autoipd <NIC-Device> -Dを実行してアドレスを確保 <NIC-Device>にはランダムなIPアドレスを振るNICを指定する(ex. em1,eth0,eno1…)

(7) クライアントで以下のように実行して、ノードが見えることを確認

# avahi-resolve -4 --name raspberrypi1.local

(8) ping raspberrypi1.local で応答が返ってくることを確認

(9) ssh pi@raspberrypi1.local で接続

参考にした情報

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。