SSIDとパスワードを生成し、QRコードにして Slack にぶん投げる。


ゲスト用無線 LAN の SSID とパスワードの更新作業を自動化したい

ゲスト用無線 LAN 設定の更新作業が面倒なため、この作業を自動化しようと思います。

できること

  • スクリプトを実行すると Slack へ 無線 LAN の設定情報が載った QR コードが発行される
  • slack に発行された QR コードを iPhone や Android 端末で読み取ると無線 LAN の接続を提案する

画像で言うなら、これができるようにします。

仕組みの概要

  1. SSIDとパスワードを生成する
  2. 生成された情報をQRコードの画像にする
  3. SSIDとパスワードの情報を画像にする
  4. 上記の内容を Slack にぶん投げる

環境

  • CentOS Linux release 7.7.1908 (Core)
  • Python 3.6.8

実装

Github に書いたコードを参照ください

使ってみる

Slack の設定(Tokenが取得できればOK)

  1. slack で app を選択し bot を追加する

  2. bot に名前を設定する

  3. bot に対する Token を取得する(このトークンは後で設定します)

python のコードに設定

rice_cooker.py(8行目~13行目)
# Please Write Your Wi-Fi Setting & Slack Token & Font Path
CONPANY_NAME        = 'GUEST'
ENCRYPTION_METHOD   = 'WPA'
SLACK_TOKEN         = ''
SLACK_CHANNEL       = 'freewifi-dev'
FONT_PATH           = '/usr/share/fonts/dejavu/DejaVuSans.ttf'

下記の項目を入力します。

  • 設定項目
    • CONPANY_NAME = 'SSID の先頭の文字列を入力します'
    • ENCRYPTION_METHOD = '無線 LAN の暗号化方式を入力します'
    • SLACK_TOKEN = 'QRコードを投下する Slack に投下するためのトークンを入力します'
    • SLACK_CHANNEL = 'QRコードを投下する Slack のチャンネルを指定します'
    • FONT_PATH = 'CentOS 上にあるフォントの位置を指定します'

Slack へ QR コードの投下と確認

  1. python3 rice_cooker.py で実行する

  2. slack で QR コード、SSID、パスワードを確認する

iOS から Wi-Fi 接続

  1. iPhone を立ち上げて、 QR コードを読み取る

  2. ネットワークに接続することを促されるので、接続をタップする

  3. 無線 LAN に接続されていることを確認する

無事、接続されました!

ネットワーク設定自動化について

本来は、この処理の後に、 SSH で AP に接続し、無線 LAN の設定(SSID,Password)を追加および削除するコードが入っていました。
Ansible か Netmiko で実装しようかと思いましたが、使っていた無線 LAN の端末が Aruba製品 で、それらが使えず Python の expect で対応しました。
モチベーションが残っていれば expect でのネットワーク設定自動化についても書いていこうかと思います。

ハマる点

  • Pillow の Image.width は正しく処理されないことがあり、 Image.size[0] に処理を入れ替えてお茶を濁しました。

参考