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_anonymous
をfalse
にすることで、パスワードログインが必須になります。
あとは、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
オプションを指定することによって、デバッグメッセージも確認できます。)