Rya*_*Lee 5 mysql ssh tunnel node.js
这可能是重复的,但我找不到该用例的任何内容。
设置:
MySQL 实例 - 只有白名单上的 IP 可以通过 ip/user/pass 连接。没有操作系统/SSH 访问权限。
授权服务器 - 我有 root 访问权限。位于 MySQL 实例的白名单中。可以通过 mysql -h -u -p 进入MySQL实例。
开发笔记本电脑 - Windows 笔记本电脑。无法列入动态 dhcp 的白名单。可以通过 SSH 连接到授权服务器。
这是所有 IT 基础设施,无法更改。
我使用 DBeaver 并设置“使用 SSH 隧道”通过授权服务器隧道进入 MySQL 实例,没有问题。
我也可以使用适用于 Windows 的 git bash 从开发笔记本电脑隧道进入授权服务器。(但这对我没有任何帮助)
ssh -L 3306:localhost:3306 Authorized_Server
Dev Laptop 如何在 MySQL 实例上运行 nodejs mysql 查询?
谢谢你,
瑞安
如果我正确理解你的配置,你确实有类似的东西:
+--------------+ SSH Tunnel +-------------------+ MySQL Connection +----------------+
| | ----------------> | | ------------------------> | |
| Dev Laptop | (localhost:3306) | Authorized Server | (MySQL_Instance_IP:3306) | MySQL Instance |
| | <---------------- | | <------------------------ | |
+--------------+ +-------------------+ +----------------+
<-------------------------- Data Flow ---------------------------->
Run Code Online (Sandbox Code Playgroud)
为了设置“隧道跳转”连接,以便您的开发笔记本电脑可以通过 NodeJS 应用程序与 MySQL 实例交互,您需要设置到授权服务器的本地 SSH 隧道,并从那里建立到MySQL 实例。
在您的开发笔记本电脑上,您可以设置 SSH 隧道以将本地主机端口 3306 转发到授权服务器上的端口 3306:
+--------------+ SSH Tunnel +-------------------+ MySQL Connection +----------------+
| | ----------------> | | ------------------------> | |
| Dev Laptop | (localhost:3306) | Authorized Server | (MySQL_Instance_IP:3306) | MySQL Instance |
| | <---------------- | | <------------------------ | |
+--------------+ +-------------------+ +----------------+
<-------------------------- Data Flow ---------------------------->
Run Code Online (Sandbox Code Playgroud)
请替换MySQL_Instance_IP为 MySQL 实例的 IP 地址以及Authorized_Server授权服务器的 IP 地址或主机名。
这与将ssh -L 3306:localhost:3306 Authorized_Server流量从开发笔记本电脑上的端口 3306 转发到授权服务器本地主机上的端口 3306 不同:如果 MySQL 服务器在授权服务器本身上运行,并且正在侦听本地主机 (127.0.0.1) 上的端口 3306,这个设置会起作用。
但是,由于您的 MySQL 实例位于不同的服务器上,因此该隧道不便于连接到 MySQL 实例;因此你提到它“对我没有任何帮助”。
ssh -L 3306:MySQL_Instance_IP:3306 aUser@Authorized_Server将设置一条 SSH 隧道,通过授权服务器将流量从开发笔记本电脑上的端口 3306 转发到 MySQL 实例上的端口 3306。这将有效地创建一条从您的开发笔记本电脑通过授权服务器到达 MySQL 服务器的隧道,允许您与 MySQL 实例交互,就像它在您的开发笔记本电脑上本地运行一样。
aUser代表具有通过 SSH 登录所需权限的服务帐户。建议使用具有完成手头任务所需的最少权限的用户帐户,以遵守最小权限原则 (PoLP)并增强安全性。
在您的 NodeJS 应用程序中,使用 localhost 和端口 3306 设置 MySQL 连接(因为 SSH 隧道通过授权服务器将此本地端口转发到 MySQL 实例端口)。使用以下命令创建文件(例如mysqlConnection.js):
ssh -L 3306:MySQL_Instance_IP:3306 aUser@Authorized_Server
Run Code Online (Sandbox Code Playgroud)
将'your_mysql_username'、'your_mysql_password'、 和'your_database_name'分别替换为您的 MySQL 实例用户名、密码和数据库名称。
创建一个要运行 MySQL 查询的 NodeJS 脚本。例如,在名为 的文件中app.js,需要该mysqlConnection.js文件并运行查询,如下所示:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'your_mysql_username',
password: 'your_mysql_password',
database: 'your_database_name',
port: 3306
});
connection.connect(error => {
if (error) {
console.error('Error connecting to the database: ' + error.stack);
return;
}
console.log('Connected to the database as ID ' + connection.threadId);
});
module.exports = connection;
Run Code Online (Sandbox Code Playgroud)
现在,运行脚本:
const connection = require('./mysqlConnection');
connection.query('SELECT 1 + 1 AS solution', (error, results, fields) => {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
connection.end();
Run Code Online (Sandbox Code Playgroud)
该脚本应该运行 MySQL 查询来添加 1 + 1,然后控制台记录解决方案。The solution is: 2如果一切设置正确,您应该在控制台中看到“ ”。
| 归档时间: |
|
| 查看次数: |
176 次 |
| 最近记录: |