使用SSH隧道从Node-Red连接到远程MYSQL数据库

时间:2018-05-27 18:18:54

标签: mysql node-red ssh-tunnel

我有一组数据从Node-Red推出,我想发送到远程MYSQL数据库。 Node-Red系统正在Raspberry Pi上运行。我该如何工作?我知道如何使用Node.JS,但我不知道如何在Node-Red中执行此操作。 Pi的IP地址是动态的,因此简单地授权其IP地址不会令人遗憾。

提前致谢!

编辑澄清:

我想连接到由我的虚拟主机托管的远程MYSQL数据库。我已将Raspberry Pi连接到电池,我想将此信息保存在上述数据库中。由于在不同位置会有多个电池设置,我无法在本地保存数据。因此,我需要通过Node-Red访问远程数据库。授权一个IP地址不起作用,因为Raspberry Pi网络的IP是动态的,因此会发生变化。我认为SSH隧道可能是解决方案,但我不知道如何在Node-Red中使用它,谷歌也不是很有帮助。

1 个答案:

答案 0 :(得分:1)

好的,正如我在评论中所说,你可以为MySQL创建一个用户名/密码对,可以授予任何IP地址的权限(如果用户名/密码被泄露,安全性就会降低。将主机设置为'%'在设置授权选项时允许所有主机。)

为降低风险,您可以将用户名/密码限制为特定子网。这可能是一个wifi网络或与piblic IP相关联的子网(它需要是公共范围,因为几乎所有蜂窝ISP都使用CGNAT)您可能正在使用的蜂窝提供商范围。 (有关详细信息,请参阅此问题How to grant remote access to MySQL for a whole subnet?)。

如果你想使用SSH隧道,那么这通常会在Node-RED之外用ssh命令行完成,例如。

ssh -L localhost:3306:localhost:3306 remote.host.com

然后将Node-RED MySQL节点配置为指向localhost。

由于连接看起来像是来自MySQL机器上的localhost,因此您需要确保将用户名/密码锁定到该主机。

您可能还想为ssh连接设置公钥/私钥验证。

您可以在node-red-daemon节点中运行ssh命令,该节点如果被删除则应该重新启动连接。