请帮助我了解如何发布到Mosquitto,该Mosquitto坐在需要密钥文件才能通过ssh连接到服务器的服务器上。
我正在尝试从其他网络中的计算机向Ubuntu 16.04服务器上的Mosquitto发布消息。
我已将问题缩小到服务器的连接配置设置。
要使用它,我需要传递密钥文件,例如:ssh -i mykeyfile.pem user@ipaddress
问题是我无法从其他网络中的计算机访问Mosquitto,因为我不知道如何指定密钥文件。我检查了端口,它们是打开的。
这就是我试图发布的方式:mosquitto_pub -h ip_address -p 1883 -t test -m "hello world"
使用相同的配置,我在不需要密钥文件ssh的其他服务器上进行了尝试。我设法发布了一条消息。这就是我得出的结论,即问题是关键文件。
Mosquitto的配置是默认配置。 mosquitto.conf
的内容是:
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
pid_file /var/run/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
我在尝试发布时收到的错误是:
Error: Connection timed out
编辑
防火墙已禁用,因此
sudo ufw status
的结果为disactivated
。我启用了它并设置了一些规则。当前状态为:Status: active
To Action From
-- ------ ----
8083 ALLOW Anywhere
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
1883 ALLOW Anywhere
8083 (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
1883 (v6) ALLOW Anywhere (v6)
下一个输出来自iptables
sudo iptables -L -v -n
:Chain ufw-user-input (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8083
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:8083
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:22
699 40412 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1883
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1883
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1883
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1883
但是仍然无法发布消息。
Mosquitto所在的计算机可以运行Apache2服务器
我希望这是有道理的。
谢谢。
最佳答案
这是我解决问题的方法。
内容:
蚊子在服务器上,
服务器在虚拟机中
VM在OpenStack上。
在对iptables,ufw,防火墙和mosquitto的配置文件进行了(可能是不必要的)更改之后,我检查了OpenStack(我知道...为什么我以前没有提到它!好吧,我是如此困惑,以至于没有我的第一个想法)。因此,我意识到我的VM的安全组没有端口1883的规则(既不允许也不拒绝)。我加了
尤里卡,我可以从外部计算机发布消息。
这是我的安全组的样子(添加了最后两行):
我的收获是,不仅有一扇门,而且像洋葱一样有很多层可以穿过!
希望这会帮助其他人。
关于ssl - 在OpenStack服务器中发布到Mosquitto,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54056736/