Raspberry Pi 3 B+とMacをSSHで繋いで初期設定!

こんにちわ!のこのこです!

前回(モニター・キーボードなしでRaspberry Pi 3 B+をセットアップ!(OSのダウンロードとラズパイへのインストール))はOSの書き込みまでやりましたので、今回はsshでラズパイに接続して、操作していきたいと思います!

ラズパイのsshをmacから起動させる

参考サイト様

Raspberry Pi 3 B+ではセキュリティ面に問題があるためデフォルトではsshが起動していません。(以前は起動していたらしい)

キーボードを使えば、直接ログインして設定を変更すればいいのですが、今回はありませんので、microSDの直下にsshと言う名前のファイルを作ります。

Macだとwinと違い、ファイルの新規作成が出来ませんので「launchpad」→「その他」から「テキストエディット」を開いてboot(SDカードのフォルダ)の直下にファイルを新規作成して下さい。

エディット画面になったら何も書き込まずに名前を「ssh」としてファイルを保存して下さい。

右クリック→「情報を見る」でファイルの情報を開き、「名前と拡張子」の項目の拡張子「.rtf」を削除して下さい。
ポップアップが開いで「拡張子を削除しますか?」のようなことを聞かれるので無視して削除して下さい。

※追記!もっと楽にコマンドでsshファイルをSDカードに作成する方法!

# SDカードを差し込んだ状態で
$ mount

# sshファイルを「/Volumes/boot」(SDカード内のディレクトリ)に作成
$ touch /Volumes/boot/ssh

# diskutil listコマンドでSDカードの認識されているディスクを確認
$ diskutil list

/dev/disk0 (internal):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     

......

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:             FDisk_partition_scheme          *16.0 GB    disk2
   1:                        
   2:                    

# ディスク取り出し
$ diskutil eject /dev/disk2

これでSDカードのルートディレクトリにsshファイルが作成されます!

Linux上ではmountコマンドを入力することで記憶媒体の読み書きが実行になるらしく、マウントしたのちtouchコマンドでSDカードの中にsshファイルを作成、その後ディスクの取り出しを行うという流れです!

参考:この1ページで一通りわかる!Linuxのマウント(mount)について

ラズパイにsshでログイン

sshファイルをSDカードに入れたら、ラズパイに挿入し、LANケーブルとルーターを繋いで起動します。

LANに接続された時点でIPアドレスは付与されているらしく、これを確認するために「arp」コマンドで接続されているデバイスのIPアドレスを見てみましょう。

$ arp -a

? (192.168.○.△) at b8:27:eb:3d:48:1f on en0 ifscope [ethernet]

macアドレスの上位6桁が「b8:27:eb」のIPアドレスが2つ見つかると思います。
ラズパイのmacアドレスは「b8:27:eb」から始まりますのでIPアドレスを特定できます。

片方が有線、もう片方が無線LANのIPアドレスですので、下記コマンドで、タイムアウトにならずに接続できる方が有線LANのアドレスになります。(無線はまだ繋がっていない)

$ssh pi@192.168.○.△

デフォルトでは

ユーザー名:pi
パスワード:raspberry

となっていますので、パスワードを入力して、ログインして下さい。

ラズパイの初期設定

無事に接続できたら初期設定をしていきます。

「raspi-config」で設定画面を開いていきましょう

$ sudo raspi-config

するとこんな画面が開きますので

1 Chagen User Password
→パスワードの変更

4 Localisation Options → I2 Change Timezone → Asia → Tokyo
→タイムゾーンの変更

4 Localisation Options → I4 Change Wi-fi Country → Japan
→Wi-Fiを使う国の設定

7 Advanced Options → A1 Expand Filesystem
→SDカードの容量上限解放。未設定だと2GB程度までしか認識できない。

上記を設定しで再起動する。

再起動はsudo rebootで行えます。

Wi-Fiの設定

ルーターの説明書などを確認して、下記コマンドを入力してWi-Fiの設定をしましょう。

$ sudo sh -c 'wpa_passphrase ○○ △△ >> /etc/wpa_supplicant/wpa_supplicant.conf'

○○:SSID
△△:キー

Wi-Fiの設定ファイルは/etc/wpa_supplicant/wpa_supplicant.confにありますので、「cat」コマンドで確認してみましょう。

$ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
ssid="○○"
#psk="△△"
psk=****************************************************************
}

○○と△△には指定したSSIDとキーが入っていて、「psk=」の後にはキーが暗号化された英数字が入っています。

「#psk=”△△”」の部分を残しておくのはセキュリティ上問題があるので削除しましょう。

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP

network={
ssid="○○"
psk=****************************************************************
}

設定後は再度sudo rebootで再起動をかけます。

IPアドレスの固定

IPアドレスは定期的(?)に変わってしまうらしいので、その都度調べるのは面倒です。
なので固定化させて接続を楽にしましょう。

まずifconfigでIPアドレス等を確認します。

$ ifconfig

eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether b8:27:eb:68:1d:4a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.6 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇 prefixlen 64 scopeid 0x0
inet6 〇〇〇〇::〇〇〇〇:〇〇〇〇:〇〇〇〇:〇〇〇〇 prefixlen 64 scopeid 0x20 ether b8:27:eb:3d:48:1f txqueuelen 1000 (Ethernet)
RX packets 561 bytes 50099 (48.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 513 bytes 86120 (84.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

この中の「wlan0:」の項目を見ると、2行目に「inet 192.168.2.6 netmask 255.255.255.0 broadcast 192.168.2.255」という記述が確認できます。

inet 192.168.2.6:現状のネットワークアドレス(先頭)
broadcast 192.168.2.255:ブロードキャストアドレス(最後)

となっており、IPアドレスを固定化する際は「192.168.2」までは固定で、末尾は「7254」の範囲で指定してあげなければならない。
(参考:付録・IPアドレス範囲(IPアドレス/サブネット) 早見表
)

固定化したいIPアドレスが決まったら/etc/dhcpcd.confを修正していく。

$ sudo nano /etc/dhcpcd.conf
# 開いたファイルの文末に以下を追加
interface wlan0
static ip_address=192.168.2.8/24 #固定するローカルIP
static routers=192.168.2.1 #デフォルトゲートウェイのIP
static domain_name_servers=192.168.2.1 8.8.8.8 #DNSサーバーのIP

保存して例のごとくrebootしてやる。

ifconfigで確認すると、先ほどの「inet 192.168.2.6」が「inet 192.168.2.8」に変わっているはずです。

これで固定化完了です。次回接続時には固定化したIPを指定してログインして下さい。

コラム

ラズパイにホスト名でアクセスする

参考サイト様:IPアドレスがわからないラズパイにホスト名でSSH接続する簡単な方法(mDNS)

ラズパイにアクセスしているときはコマンドラインにpi@raspberrypi:~ $と表示されていますが、「pi」はユーザー名、「raspberrypi」はhostnameとなっております。

表示されていない場合は「hostname」コマンドで表示できます。

$ hostname

raspberrypi

sshで接続する際にはこのhostnameを指定してログインすることができます。

$ ssh pi@raspberrypi.local

これでパスワードを入力すると接続されます。

hostnameはraspi-configから変更できます。

$ sudo raspi-config

2 Hostname
→ az、09、-(ハイフン)のみ利用可能で変更できる。

「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」という警告文がでる。

ラズパイを色々いじくり回していると、sshで接続した際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」という警告文が出てきて繋がらない時があります。

このエラーはサーバ上の公開鍵と、秘密鍵の情報が異なっているために発生しているらしく

①:/Users/user/.ssh/known_hostsから一度鍵情報を削除、再度サーバに接続して鍵の情報を再取得する

②:sshの鍵を再作成します。

のいずれかの方法があるようです!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
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:54
ECDSA host key for 192.168.0.10 has changed and you have requested strict checking.
Host key verification failed.

①known_hostsから鍵情報を削除

参考:SSH接続で WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

# 「2.8」の箇所は固定したIPアドレスの下2桁
$ sed -i -e `/2.8/d` ~/.ssh/known_hosts

# 再接続
$ ssh@192.168.2.8

②sshの鍵情報の削除

参考:ssh接続をする際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」と出てつながらない

# 鍵情報の削除
$ ssh-keygen -R 192.168.2.8

# 再接続
$ ssh@192.168.2.8

再接続する時にはAre you sure you want to continue connecting (yes/no)?と聞かれるので 「yes」と入力すると接続できるはずです。