Ubuntu18.04部署Mosquitto

发布时间 2023-10-01 01:20:06作者: 小miang

2023.09.27

主要说明在ubuntu18.04下如何部署mosquitto,以及mosquitto的具体使用。本笔记不对虚拟机和ubuntu安装进行展开,可直接看下面的参考链接

参考链接

推荐也可以看[官网]([Eclipse Mosquitto),对于官网部分英文不好看懂的可以参考这个链接Mosquitto 配置登录 - ioufev - 博客园 (cnblogs.com),博主基本上关于mosquitto的博客有翻译官方文档

安装VS Code

使用VC看文档和代码比较合理方便,所以进行安装

sudo snap install --classic code

打开VC时直接输入

code 文件

mosquitto安装

安装mosquitto服务器

引入mosquitto仓库并更新

sudo apt-add-respository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

安装mosquitto

sudo apt-get install mosquitto

安装mosquitto客户端

sudo apt-get install mosquitto-clients 

mosquitto常用指令

服务器端

开启/停止服务

sudo service mosquitto start
sudo service mosquitto stop

查看服务

sudo service mosquitto status

mosquitto命令

mosquitto [-c config file][-d| --daemon][-p port number][-v]
-c :表示加载启动文件
-d : mosquitto在后台运行(暂时还不知道有什么用)
-p :mosquitto启动后监听的端口号,会覆盖[-c config file]中指定的配置端口
-v :代码调试模式,输出更多信息

比如目前输入 mosquitto -v,会输出一下信息:

image-20230928182350163

客户端

客户端分为两个主要部分,订阅消息的 mosquitto_sub和发布消息的mosquitto_pub

mosquitto_sub常用指令

-h :指定服务器地址,localhost表示本地通信,默认选项是本地通信
-p :连接的端口号,一般默认1883(在服务器的默认情况下,端口即为1883)
-t :指定topic
-d :打印debug信息
-v :打印接受信息、
-i :指定clientid,即指定自己的id,默认的是mosquitto_pub加上客户端的进程id,不能和 -I id前缀同时使用
-I :指定clientid前缀,与客户端的进程ID连接组成clientid,不能与 -i 同时使用

本地接受topic消息并打印的简单指令

mosquitto_sub -h loaclhost -p 1883 -t "demo" -v -d

mosquitto_pub常用指令

-h :指定服务器地址,localhost表示本地通信,默认选项是本地通信
-p :连接的端口号,一般默认1883(在服务器的默认情况下,端口即为1883)
-t :指定topic
-m :消息内容(-t 和 -m 指令需要一块使用)
-f :将指定文件内作为消息发送
-n :发送一个空(null)消息
-d : 打印debug信息
-i :客户端id

本地发布一个topic的简单指令

mosquitto_pub -h loaclhost -p 1883 -t "demo" -m "try"

代理(Authentication methods)

主要参考官网的这部分链接内容Authentication methods | Eclipse Mosquitto

对于mosquitto 2.0之后的版本,必须更改默认的代理选项客户端才能进行远程连接

身份验证主要可以分为三个方式:

  • psaawors files.密码文件
  • authentication plugins,身份验证插件
  • unaunthorised/anonymous access 未经授权/匿名访问

可以使用三种方式的组合

同时可以设置 per_listener_setting true不同监听器使用不同的监听方法

学习使用建议还是直接选择匿名登录,不用麻烦去修改配置文件

unaunthorised/anonymous access

目前mosquitto默认是非匿名访问的,配置匿名访问

allow_anonymous true

举例:

allow_anonymous true

listener 1883
protocol mqtt 

password files

用于存储用户和密码,适用于少量静态用户

主要命令行

重新创建一个 password file文件,或者直接复写

mosquitto_passwd -c <password file> <username>

在某个 password file中添加用户

mosquitto_passwd <password file> <username>

对于上面俩条都是在文件中写入用户和密码,可以直接在用户后面加入密码,但密码可以通过命令行显示

在某个password file中去除用户

mosquitto_passwd -D <password file> <username>

在更改完密码文件后,需要通过发送SIGHUP消息来重新加载文件

两种方式

第一种是杀死进程,比较麻烦

ps -a #找到mosquitto的进程id
kill -HUP <process id of mosquitto>

第二种是直接重启服务

systemctl restart mosquitto

举例

listener 1883
password_file /etc/mosquitto/password_file

对于配置了 per_listener_settings true ,需要在每个监听器后面加上文件密码选项

authentication plugins

使用比密码文件提供更多的控制,可以使用身份验证插件,在此不做介绍,可以自行看链接和官网

配置mosquitto.conf

编辑mosquitto.conf基本操作

sudo vim /etc/mosquitto/mosquitto.conf

对于vim的操作进行简单说明,vim主要是对文件进行操作
在进入文件后,

点击i 进行写操作,点击esc退出写操作

点击: q ! 关闭文件 ,点击 : w q ! 是保存修改后关闭文件

加载mosquitto.conf是

sudo mosquitto -c mosquitto.conf

这里需要说明,conf中默认的user是 mosquitto,直接使用 -c 会报错,需要使用 sudo,也可以将conf中的user改为 root 即可

此处打开的conf文件内存为如下(本人已经更改了部分内容)

image-20230928222935329

可以看到上面注释中说到完整的example路径,但初次打开路径后会发现只有

mosquitto.conf.gz,该文件需要进行解压

sudo gzip -d mosquitto.conf.gz

再使用VC打开解压后的conf文件,即可打开具有完整内容的conf示例

image-20230928223737643