Javascript 在节点MySQL中使用SSH隧道连接到MySQL
当使用npm包时,是否可以使用SSH密钥而不是密码连接到MySQL服务器?您可以完全独立地完成SSH隧道组件,然后使用TCP隧道通过SSH将节点MySQL(或任何其他sql客户端…)指向您的数据库 只需像这样设置SSH隧道Javascript 在节点MySQL中使用SSH隧道连接到MySQL,javascript,mysql,node.js,npm,Javascript,Mysql,Node.js,Npm,当使用npm包时,是否可以使用SSH密钥而不是密码连接到MySQL服务器?您可以完全独立地完成SSH隧道组件,然后使用TCP隧道通过SSH将节点MySQL(或任何其他sql客户端…)指向您的数据库 只需像这样设置SSH隧道 ssh -N -p 22 sqluser@remoteserverrunningmysql.your.net -L 33306:localhost:3306 将其保留在背景中(有关更深入的信息,请参阅) 然后只需将任何MySQL客户端发送到本地主机上的端口33306。它将实
ssh -N -p 22 sqluser@remoteserverrunningmysql.your.net -L 33306:localhost:3306
将其保留在背景中(有关更深入的信息,请参阅)
然后只需将任何MySQL客户端发送到本地主机上的端口33306。它将实际连接,就像您在远程服务器上使用端口3306一样。非常感谢Steve,您的回答对我帮助很大。只是为了更清楚地使用它 ssh-fuser@personal-server.com-l2000:personalserver.com:25-N f告诉ssh在执行命令之前进入后台。然后是您登录的用户名和服务器。-L2000:personal server.com:25的格式为-L本地端口:主机:远程端口。最后,-N指示OpenSSH不要在远程系统上执行命令 要连接到mongo,请使用您设置为本地端口的任何端口(在本例中,端口为2000) 例如,假设我想在IP为192.168.0.100的远程服务器上连接,并且mongo正在端口27017上运行 假设一个名为elie且密码为eliepassword的用户可以访问端口22上的ssh,我将不得不这样做 首先在终端上运行以下操作: ssh-felie@192.168.0.100-L 2002:127.0.0.1:27017-N 在我的mongo连接中,我将执行以下操作: var mongoose=require('mongoose') 猫鼬mongodb://localhost:2002/mydatabase'); module.exports=mongoose.connection
我希望这能说明问题。这确实有效!确保连接始终运行的最佳方法是什么?我不确定最佳方法是什么,但可能只是一个开始。
const mysql = require('mysql2');
const { Client } = require('ssh2');
const sshClient = new Client();
const dbServer = {
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE
}
const tunnelConfig = {
host: process.env.DB_SSH_HOST,
port: 22,
username: process.env.DB_SSH_USER,
password: process.env.DB_SSH_PASSWORD
}
const forwardConfig = {
srcHost: '127.0.0.1',
srcPort: 3306,
dstHost: dbServer.host,
dstPort: dbServer.port
};
const SSHConnection = new Promise((resolve, reject) => {
sshClient.on('ready', () => {
sshClient.forwardOut(
forwardConfig.srcHost,
forwardConfig.srcPort,
forwardConfig.dstHost,
forwardConfig.dstPort,
(err, stream) => {
if (err) reject(err);
const updatedDbServer = {
...dbServer,
stream
};
const connection = mysql.createConnection(updatedDbServer);
connection.connect((error) => {
if (error) {
reject(error);
}
resolve(connection);
});
});
}).connect(tunnelConfig);
});