101010

プログラミング備忘録とともに、ポエムってます。

Raspberry Pi Zeroをホスト名でSSHアクセス可能にする | Raspberry Pi

f:id:araemonz:20190316164739j:plain

前回の記事からラズパイの設定の続きを行う。

www.101010.fun

今回はラズパイをホスト名でSSHアクセス出来るようにしてみた。最終的な解決方法は最下部のまとめに記してあるので急ぎの方はそちらを参考にしてほしい。

ホスト解決の格闘

ssh pi@192.168.100.136 でログインして sudo vi /etc/hosts でホストファイルを編集する。

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

127.0.1.1       raspi0 #←ここを書き換えた

初期設定ではrootにパスワードが設定されていないのでroot権限ファイルはsudoコマンド一発で修正できるんだね。

sudo reboot でラズパイを再起動したらすぐにホスト名で接続できると思いきや、なんとできない! 次の記事に解決法が書いてあった。

Raspberry PiでAvahi を使ってホスト名でアクセスする | 株式会社インデペンデンスシステムズ横浜

なるほど、そもそもホスト名でアクセスするには Zeroconfという技術をつかって行っているようで、MACではBonjourがそれに当たるんだね。LinuxではAvahiというソフトウェアを入れることでそれが可能となるようだ。

さっそくライズパイ上で以下コマンドを実行してavahi-daemonをインストールする。

sudo apt-get install avahi-daemon

avahi-daemonは自動起動に設定されるようだ。

とりあえずラズパイ再起動。

sudo reboot

さて、MACからラズパイのホスト名でアクセスしてみよう。

ssh pi@raspi0.local

あれれできないっすねぇ。

pingも通らない。

ping raspi0.local
ping: cannot resolve raspi0.local: Unknown host

ラズパイでavahi-daemonを再起動してみる。

sudo /etc/init.d/avahi-daemon restart
sudo: unable to resolve host raspberrypi
[ ok ] Restarting avahi-daemon (via systemctl): avahi-daemon.service.

すると気になるメッセージがunable to resolve host raspberrypi

あれれれ?さっきraspberrypiからraspi0の名前に変えたはずなんだけど。。。

/etc/hostsを再びraspberrypiにもどしてavahi-daemonを再起動してみる。

sudo /etc/init.d/avahi-daemon restart
[ ok ] Restarting avahi-daemon (via systemctl): avahi-daemon.service.

おや、今度はエラーメッセージ無しで通った。

Macからpingで確認。

ping raspberrypi.local
PING raspberrypi.local (192.168.100.136): 56 data bytes
64 bytes from 192.168.100.136: icmp_seq=0 ttl=64 time=12.978 ms
64 bytes from 192.168.100.136: icmp_seq=1 ttl=64 time=12.745 ms
64 bytes from 192.168.100.136: icmp_seq=2 ttl=64 time=12.107 ms
64 bytes from 192.168.100.136: icmp_seq=3 ttl=64 time=10.968 ms
64 bytes from 192.168.100.136: icmp_seq=4 ttl=64 time=12.126 ms
64 bytes from 192.168.100.136: icmp_seq=5 ttl=64 time=14.754 ms
^C
--- raspberrypi.local ping statistics ---
6 packets transmitted, 6 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 10.968/12.613/14.754/1.150 ms

ガンガンとおった!ちなみにローカルネットワークからアクセスする場合は ホスト名.local としなければならないルールがあることを知った。

しかしその後もホスト名をraspi0書き換えてあれこれ試したがrasberrypiの名前以外だとホスト解決できない。調べていくうちになんとホスト名の設定は2つ存在していることがわかった!

thepihut.com

このファイルのそれぞれのraspberrypiを書き換えなければならなかったのだ。

sudo vi /etc/hostname
sudo vi /etc/hosts

ラズパイリブートして、Macでpingの確認する。

$ ping raspi0.local     
PING raspi0.local (192.168.100.136): 56 data bytes
64 bytes from 192.168.100.136: icmp_seq=0 ttl=64 time=89.859 ms
64 bytes from 192.168.100.136: icmp_seq=1 ttl=64 time=22.888 ms
 64 bytes from 192.168.100.136: icmp_seq=2 ttl=64 time=12.121 ms
64 bytes from 192.168.100.136: icmp_seq=3 ttl=64 time=12.014 ms
^C
--- raspi0.local ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 12.014/34.221/89.859/32.425 ms

今度は通りましたね!!お見事!

今後、SSHでは次のようにして接続できる事になった。

ssh pi@raspi0.local

IPアドレスはいちいち覚えてられないし、IPアドレスが変わってもホスト名でアクセス出来るので設定しておいて損はないと思う。

まとめ

ラズパイに avahi-daemon をインストールすること。

ホスト名は下記2つのファイルを編集すること。

sudo vi /etc/hostname
sudo vi /etc/hosts

ローカル環境でアクセスする場合は下記のようにホスト名.localをつけること。

ssh pi@raspi0.local