前言
为了网络安全起见,数据库和后端服务一般不会直接部署在同一台机器上,且一般也不允许直接用账户+密码的方式直接连接,通常采取的方案是通过 ssh 的方式进行连接。
项目已经封装成 npm 包:ssh2-connect-mysql
github 地址:ssh2-connect-mysql
步骤
- 建立 ssh 连接
- 与 mysql 建立连接
- 得到 mysql 操作句柄
实现方式
const client = require("ssh2").Client;
const mysql = require('mysql2');
const _client = new client();
// see config: https://github.com/mscdex/ssh2
const ssh_conf = {
host: 'xxx.xxx.xx.1',
port: 22,
username: 'maria',
privateKey: fs.readFileSync('/path/to/my/key')
};
// see config: https://github.com/sidorares/node-mysql2
const db_conf = {
host: 'xxx.xxx.xx.2',
user: 'realzzzdb',
password: 'qwer123..',
database: 'mydb'
};
// 建立 ssh 连接
_client.on("ready", function () {
_client.forwardOut(
"127.0.0.1",
12345,
db_config.host,
db_config.port,
function (err, stream) {
if (err) {
_client.end();
return renject("Connection failed.");
}
// 得到 stream
db_config.host = 'localhost';
db_config.stream = stream;
// 得到 mysql 的操作句柄
_sql = mysql.createConnection(db_config);
}
).connect(ssh_config); // ssh 连接的参数
});
更好的使用,封装成 npm 包
npm package: ssh2-connect-mysql
github page: ssh2-connect-mysql