如何使用MQTT .js连接到运行在Google云虚拟机实例上的MQTT Broker



我想要达到的目标:我有一个蚊子MQTT代理运行在谷歌云虚拟机(Ubuntu)上,我希望能够使用MQTT .js从我的本地PC连接到它

我设置

我在Google Cloud上创建了一个虚拟机实例,运行Ubuntu 20.04.LTS。

部分设置:

Firewall – allow HTTPS and allow HTTP
Firewall rule – opens port 1883

我在这个VM上安装了mosquito to MQTT Broker (version 1.6.9)。

我能够通过打开SSH终端,一个发布,一个订阅来验证安装并运行

mosquitto_sub -t test
mosquitto_pub -t test -m “hello”

然后我读到当我想使用第三方工具连接虚拟机时,我必须创建并上传我自己的SSH密钥到虚拟机:

ssh-keygen -t rsa -f C:keysVM_KEYFILE -b 2048 pwd: ****

我现在有两个文件,私钥和公钥:

VM_KEYFILE
VM_KEYFILE.pub

然后使用icacls修改私钥的权限:

icacls.exe VM_KEYFILE /reset
icacls.exe VM_KEYFILE /grant:r “$($env:username):(r)”
icacls.exe VM_KEYFILE /inheritance:r

然后我成功地从Windows控制台连接到VM:

ssh -i "VM_KEYFILE" username@vm_public_ip_address

现在我要尝试使用node。js

进行连接我已经有一个javascript文件,它使用MQTT .js连接到一些公共MQTT代理,例如HiveMQ它的一些设置是:

let broker_host = 'broker.hivemq.com';
let broker_port = 1883;
let client_id = 'my_client_1';
const connection_options = {
port: broker_port,
host: broker_host,
clientId: client_id,
clean: true,
keepalive: false
};

我的问题:如何修改此JavaScript文件以连接到运行在Google Cloud VM中的MQTT代理

没有为代理本身设置用户名/密码/身份验证,只有VM。

我尝试了这样的东西,但我不知道如何使用SSH密钥

let broker_host_gcm_vm = 'https://<vm_public_ip_address>

我可以从(a) MQTT浏览器和(b) MQTTX桌面应用程序连接到代理。

我所要输入的连接细节是:

Host: mqtt://<ip address>
Port: 1883

那么我就可以成功发布/订阅了。

我试着改变我的JavaScript连接到以下,但我仍然不能从这里连接:

let broker_host_gcm_vm1 = 'mqtt://<ip address>';

我找到问题了。

假设主机的IP地址是11.22.33.44

主机不是这些:

let broker_host = 'http://11.22.33.44';
let broker_host = 'https://11.22.33.44';
let broker_host = 'mqqt://11.22.33.44';
let broker_host = 'mqtts://11.22.33.44';

但是很简单:

let broker_host = '11.22.33.44';

当你知道怎么做的时候很简单:)

最新更新