Ubuntu 16.04安装测试MQTT Mosquitto
环境:Ubuntu 16.04
介绍MQTT
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数据收集。
Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置的特点。
在本教程中,我们将安装Mosquitto并设置我们的代理以使用SSL来保护受密码保护的MQTT通信。
MQTT 是一个轻量级即时通信协议,使用基于 TCP/IP 协议的发布/订阅消息转发模式, MQTT 协议的中心是 broker( 服务器/代理),客户端通过订阅消息和发布消息进行数据交互。
若初次接触MQTT协议,可先理解以下概念:
【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,包括了服务器端和客户端,可以跨平台部署,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
一.安装测试mosquitto
2.1安装mosquitto
1.引入mosquitto仓库并更新
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update

2.执行以下命令安装mosquitto
sudo apt-get install mosquitto
3.查看mosquitto服务状态
sudo service mosquitto status

4.开启/停止mosquitto服务
sudo service mosquitto start
sudo service mosquitto stop
2.2简单的测试
一个完整的MQTT示例包括代理器,发布者和订阅者。
测试分为以下几个步骤:
(1)启动服务mosquitto
(2)订阅者通过mosquitto_sub订阅指定主题的消息。
(3)发布者通过mosquitto_pub发布指定主题的消息。
(4)代理服务器把该主题的消息推送到订阅者。
本机测试:
代理器,发布者和订阅者都在本机。
1.安装mosquitto客户端
sudo apt-get install mosquitto-clients
2.打开一个终端,订阅主题
mosquitto_sub -h localhost -t "mqtt" -v
【-h】指定要连接的MQTT服务器
【-t】订阅主题,此处为mqtt
【-v】打印更多的调试信息
3.打开另一个终端,发布主题
mosquitto_pub -h localhost -t "mqtt" -m "Hello2 MQTT"
【-h】指定要连接的MQTT服务器
【-t】向指定主题推送消息
【-m】指定消息内容

网络测试
test.mosquitto.org是一个公开可用的Mosquitto MQTT服务器/代理。
1.通过以下命令从test.mosquitto.org订阅所有主题,任何人发布的任何消息你都可以收到,你会看到大量有趣消息滚动在你的屏幕上。
mosquitto_sub -h test.mosquitto.org -t "#" -v

2.也可以通过以下命令订阅特定主题,用来接收自己的消息
mosquitto_sub -h test.mosquitto.org -t "msg_only_from_me" -v
mosquitto_pub -h test.mosquitto.org -t "msg_only_from_me" -m "My cat is Luna"

二 、配置MQTT密码
我们配置Mosquitto使用密码。Mosquitto包含一个实用程序来生成一个名为mosquitto_passwd的特殊密码文件。此命令将提示您输入指定用户名的密码,并将结果放入/etc/mosquitto/passwd
sudo mosquitto_passwd -c /etc/mosquitto/passwd sammy
现在我们将为Mosquitto打开一个新配置文件,并告诉它使用此密码文件来要求所有连接的登录:
sudo nano /etc/mosquitto/conf.d/default.conf
这应该打开一个空文件。粘贴如下:
allow_anonymous false
password_file /etc/mosquitto/passwd
请务必在文件末尾留下尾随换行符。
allow_anonymous false将禁用所有未经过身份验证的连接,该password_file行告诉Mosquitto在哪里查找用户和密码信息。保存并退出该文件。
现在我们需要重启Mosquitto并测试我们的更改。
sudo systemctl restart mosquitto
尝试发布没有密码的邮件:
mosquitto_pub -h localhost -t "test" -m "hello world"
该邮件应被拒绝:
Connection Refused: not authorised.
Error: The connection was refused.
在我们再次尝试使用密码之前,请再次切换到第二个终端窗口,并使用用户名和密码订阅“test”主题:
mosquitto_pub -h localhost -t "test" -m "hello world" -u "sammy" -P "password"
mosquitto_sub -h localhost -t test -u "sammy" -P "password"

它应该连接并等待消息。您可以将本终端打开并连接到本教程的其余部分,因为我们会定期发送测试消息。
现在再次使用用户名和密码与您的其他终端发布消息:
三、 配置MQTT SSL
要启用SSL加密,我们需要告诉Mosquitto存储Let的加密证书的位置。打开我们之前启动的配置文件:
sudo nano /etc/mosquitto/conf.d/default.conf
在文件末尾粘贴以下内容,留下我们已经添加的两行:
. . .
listener localhost listener
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem
同样,请务必在文件末尾留下尾随换行符。
我们在配置中添加了两个单独的listener块。
第一个,listener 1883 localhost更新端口上的默认MQTT监听器1883,这是我们到目前为止所连接的。1883是标准的未加密MQTT端口。该localhost行的部分指示Mosquitto仅将此端口绑定到localhost接口,因此无法从外部访问它。无论如何,我们的防火墙都会阻止外部请求,但明确是好的。
listener 8883在端口上设置加密侦听器8883。这是MQTT + SSL的标准端口,通常称为MQTTS。
接下来的三行: certfile,cafile,和keyfile,都指向Mosquitto到适合我们加密文件建立的加密连接。
保存并退出该文件,然后重新启动Mosquitto以更新设置:
sudo systemctl restart mosquitto
更新防火墙以允许连接到端口8883
sudo ufw allow
输出如下所示:
Rule added
Rule added (v6)
现在我们再次使用mosquitto_pub测试一些不同的SSL选项:
mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p --capath /etc/ssl/certs/ -u "sammy" -P "password"
请注意,我们使用的是完整的主机名而不是localhost。因为我们发出了mqtt.example.comSSL证书,如果我们尝试localhost安全连接,我们会收到一个错误,说主机名与证书主机名不匹配(即使它们都指向同一个Mosquitto服务器)。
--capath /etc/ssl/certs/启用SSL mosquitto_pub,并告诉它在哪里查找root证书。这些通常由您的操作系统安装,因为Mac OS,Windows等的路径不同。mosquitto_pub使用root证书验证Mosquitto服务器的证书是否由Let的加密证书颁发机构正确签名。需要很注意的是mosquitto_pub而且它没有这个选项不会尝试(或类似的SSL连接--cafile选项),即使你连接的标准安全端口8883。
如果测试结果一切正常,我们会再次看到hello出现在另一个mosquitto_sub终端。这意味着您的服务器已完全设置好!如果您想扩展MQTT协议以使用websockets,您可以按照最后一步操作。
参考链接:
https://cloud.tencent.com/developer/article/1350337
Ubuntu 16.04安装测试MQTT Mosquitto的更多相关文章
- Ubuntu 16.04 安装Mysql 5.7 踩坑小记
title:Ubuntu 16.04 安装Mysql 5.7 踩坑小记 date: 2018.02.03 安装mysql sudo apt-get install mysql-server mysql ...
- ROS_Kinetic_01 在ubuntu 16.04安装ROS Kinetic 2017.01更新
ROS_Kinetic系列学习(一),在ubuntu 16.04安装ROS Kinetic. Celebrating 9 Years of ROS! ubuntu16.04已经发布半年多了,ROS的K ...
- Ubuntu 16.04安装sogou 拼音输入法
一.更换为国内的软件源 安装搜狗输入法之前请先更换为国内的软件源,否则无法解决依赖问题.首先,用以下命令打开源列表: sudo gedit /etc/apt/sources.list #用文本编辑器打 ...
- ubuntu 16.04 安装Tensorflow
ubuntu 16.04 安装Tensorflow(CPU) 安装python ubuntu 16.04自带python2.7,因此可以略过这一步 安装pip sudo apt-get install ...
- Ubuntu 16.04 安装和配置 Redis
因为发现之前手动安装的 redis 与现有的教程不一样,所以总结统一一下安装的标准步骤. 安装依赖项 为了获取最新版本的 Redis,我们将从源代码进行编译和安装.下载源代码之前,需要先安装一些编译所 ...
- Ubuntu 16.04安装cuda7.5 GCC
http://www.linuxidc.com/Linux/2017-01/139320.htm 在介绍Ubuntu 16.04安装 CUDA7.5开始前,先辨析几个概念GPU.NVIDIA.NVID ...
- ubuntu 16.04 安装opencv 2.4.13
ubuntu 16.04 安装opencv 2.4.13 https://blog.csdn.net/u011557212/article/details/54706966?utm_source=it ...
- Ubuntu 16.04安装Memcached(单机)
Ubuntu 16.04安装Memcached,不过不仅限与Ubuntu,可以用CentOS等去安装,只不过测试时使用的是Ubuntu机器.Windows下不建议使用,本机调试可以使用,线上环境除了W ...
- Ubuntu 16.04 安装 Kodi v17 “Krypton” Alpha 2
Ubuntu 16.04 安装 Kodi v17 “Krypton” Alpha 2:sudo add-apt-repository ppa:team-xbmc/xbmc-nightlysudo ap ...
随机推荐
- 使用NPOI时ICSharpCode.SharpZipLib版本冲突问题解决
系统原来引用的ICSharpCode.SharpZipLib是0.84版本的, 添加了2.3版本的NPOI引用后,报版本冲突错误,因为NPOI用的ICSharpCode.SharpZipLib是0.8 ...
- deepin jdk 安装
一.安装JDK环境 1 .卸载系统自带的Openjdk(可能不需要) 先用检测是否安装了openjdk dpkg -l | grep openjdk 如果安装了, 使用下面命令卸载. sudo apt ...
- Wannafly挑战赛29题解
这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...
- django rest framework 向数据库中插入数据时处理外键的方法
一.models.py中 from django.db import models class UserModel(models.Model) user_name = models.CharField ...
- samba服务器的安装与配置(之前是因为没有把共享文件权限放开!)(windows7和centOS6)
注:centOS6跟centOS7安装方法不一样哦.以下是centOS6的安装过程. 安装:yum -y install samba 启动:/etc/init.d/smb start 设置开机启动:c ...
- Linux(Ubuntu)新建用户只有一个$问题
参考自: http://www.cnblogs.com/ylan2009/articles/2321177.html 1.用root登录操作 2.查看/etc/passwd文件中新建用户的权限 有没有 ...
- CSS--浮动(float)布局
浮动概述:浮动,指的是元素标签使用float属性.应用float属性的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.浮动的本质是让文字围绕图片,但现在很多时候使用浮动进行布局 ...
- [HNOI2019]鱼
Luogu5286 \(2019.4.14\),新生第一题,改了\(3\)个小时 题解-租酥雨,和出题人给的正解一模一样 枚举\(AD\),分别考虑鱼身\(BC\)和鱼尾\(EF\) 到\(E\),\ ...
- [BZOJ 5155][Tjoi2014]电源插排
传送门 网上大部分题解都写得是动态开点线段树,然而像\(MiEcoku\)这么懒惰的显然不会去写线段树... \(\color{green}{solution}\) 我们考虑来点骚操作. 线段树维护的 ...
- [ZJOI2019]Minimax搜索
先求出根节点的权值\(w\).根据套路,我们对于每个\(k\),计算\(w(s)\leq k\)的方案数,差分得到答案.为了方便,接下来考虑计算概率而不是方案数. 可以发现,对于一个给定的有解的子集, ...