Mosquittoでパスワードログインを使う

MosquittoブローカーをUbuntuサーバに構築しているのですが、あわせてパスワードログインをできるようにしたいと思います。

ちなみに、UbuntuやCentOSといった多くのLinuxディストリビューションにはMosquittoは標準リポジトリに入っているので、Ubuntu 18.04 LTSでは下記のようにインストールします。

apt install mosquitto mosquitto-clients

ブローカーだけならmosquittoだけで良いのですが、パブリッシャーとサブスクライバーも必要な場合は、mosquitto-clientsも合わせてインストールします。

パスワードファイルの作成

さて、本題です。Mosquittoにパスワードログインを設定するには、まずはパスワードファイルを作成します。

mosquitto_passwd -c /etc/mosquitto/pwfile

対話型でパスワードを聞かれるので入力すると、入力したパスワードが暗号化された、パスワードファイルが作成されます。-cオプションはパスワードファイルの新規作成です。既存のファイル名を指定した場合は、上書きになります。

複数のユーザとパスワードをまとめてパスワードファイルに設定するには、まず下記のようなファイルを作成します。ここでは、ファイル名を/etc/mosquitto/pwfileにします。

user01:pass01
user02:pass02

そのあとで、下記のコマンドを実行すると、平文で入力していたパスワードが暗号化されます。

mosquitto_passwd -b /etc/mosquitto/pwfile

mosquitto.confの設定

Mosquittoの設定ファイル(/etc/mosquitto/mosquitto.conf)に、下記を追記します。

allow_anounymous false
password_file /etc/mosquitto/pwfile

allow_anonymousfalseにすることで、パスワードログインが必須になります。
あとは、Mosquittoブローカーの再起動を行います。

Mosquittoクライアントで動作を検証

下記のようにサブスクライバーを起動します。
testトピックをサブスクライブします。

mosquitto_sub -u user01 -P pass01 -t test

パブリッシャーでtestトピックにメッセージをパブリッシュします。

mosquitto_pub -u user01 -P pass01 -t test -m message

これで、サブスクライバー側にメッセージが届けば大丈夫です。

ちなみに、mosquitto_sub -t test -dのようにユーザ名とパスワードを指定しないと、Connection Refused: not authorizedというメッセージが表示されることを確認しましょう。(-dオプションを指定することによって、デバッグメッセージも確認できます。)

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。