芽萌丸IOT研究会 @iot
@iot
2020/10/28 13:53 更新✏

ラズパイゼロにBluetooth経由でSSH接続

ラズパイ側に Bluetooth PAN (パーソナル・エリア・ネットワーク) の設定を行い、PC側からラズパイへBluetooth経由でssh接続を実現するためのメモです。

Bluetooth PAN 接続できるようにしておけば、WiFiやモバイルネットワークが無い環境でラズパイに接続してちょっとした作業をしたいときに非常に助かります。

目次:

前提

ラズパイ側で Bluetooth PAN 設定

まずはラズパイにPAN設定を行います。 ラズパイにsshログイン後(※初回だけは既にsshログインできる環境で設定を行う必要があります!)、以下のコマンドを実行していきます:

# bluez-toolsのインストール:
pi@raspberrypi:~ $ sudo apt install bluez-tools

#
# 以下のnetwork設定ファイルを新規作成
# - /etc/systemd/network/pan0.netdev
# - /etc/systemd/network/pan0.network
#

pi@raspberrypi:~ $ sudo nano /etc/systemd/network/pan0.netdev

  [NetDev]
  Name=pan0
  Kind=bridge

pi@raspberrypi:~ $ sudo nano /etc/systemd/network/pan0.network

  [Match]
  Name=pan0

  [Network]
  Address=172.20.1.1/24 # 任意のプライベートIPアドレス
  DHCPServer=yes

#
# 以下のサービス設定ファイルを新規作成
# - /etc/systemd/system/bt-agent.service
# - /etc/systemd/system/bt-network.service
#

pi@raspberrypi:~ $ sudo nano /etc/systemd/system/bt-agent.service

  [Unit]
  Description=Bluetooth Auth Agent

  [Service]
  ExecStart=/usr/bin/bt-agent -c NoInputNoOutput
  Type=simple

  [Install]
  WantedBy=multi-user.target

pi@raspberrypi:~ $ sudo nano /etc/systemd/system/bt-network.service

  [Unit]
  Description=Bluetooth NEP PAN
  After=pan0.network

  [Service]
  ExecStart=/usr/bin/bt-network -s nap pan0
  Type=simple

  [Install]
  WantedBy=multi-user.target

#
# 作成したサービスを有効化&起動
#

pi@raspberrypi:~ $ sudo systemctl enable systemd-networkd
pi@raspberrypi:~ $ sudo systemctl enable bt-agent
pi@raspberrypi:~ $ sudo systemctl enable bt-network
pi@raspberrypi:~ $ sudo systemctl start systemd-networkd
pi@raspberrypi:~ $ sudo systemctl start bt-agent
pi@raspberrypi:~ $ sudo systemctl start bt-network

# 仮想IFの pan0 が生えたことを確認:
pi@raspberrypi:~ $ ifconfig
...
pan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.20.1.1  netmask 255.255.255.0  broadcast 172.20.1.255
        ether d2:d3:88:e3:63:1b  txqueuelen 1000  (イーサネット)
        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

# Bluetoothの電波をPC側に発見してもらえるようにする:
pi@raspberrypi:~ $ sudo bluetoothctl
[bluetooth]# discoverable on

参考

PC側からラズパイにBluetooth経由でSSH接続

PC側でラズパイとのペアリングを行った上で(参考:bluetoothctlを使ったペアリング方法)、NetworkManagerのnmcliを使ってネットワークへ接続します:

# PC側での操作

# ラズパイ(MACアドレス aa:bb:cc:dd:ee:ff)の Bluetooth PAN に接続
$ nmcli dev connect aa:bb:cc:dd:ee:ff
# 接続確認:
$ nmcli dev status

  デバイス           タイプ    状態      接続           
  aa:bb:cc:dd:ee:ff  bt        接続済み  raspberrypi # <== 接続成功!

Bluetooth経由でのPAN接続に成功しました!

TIP: ペアリング方法やネットワーク接続方法は他にもありますが、上記のようにbluetoothctlnmcliを使うのが個人的には一番簡単かと思います。

PANに接続されたのでプライベートIPアドレス(172.20.1.1)を指定してラズパイにssh接続できます:

$ ssh -i .ssh/rpi/id_rsa pi@172.20.1.1
pi@raspberrypi:~ $ ## SSH接続成功!

以上です。

Raspberry Pi

芽萌丸IOT研究会 @iot
芽萌丸IOT研究会@iot
芽萌丸のIOT関連アカウント。ラズパイとか色々。記事は主に @TanakaSoftwareLab が担当。
オススメ:Zattoyomiで時事ネタチェックの時間節約!