从头开始,我用谷歌搜索了如何使用node.js和mysql库通过ssh连接到mysql数据库,我发现了这个:
Node.js connecting through ssh
所以我开始了一个“屏幕”会话,与ssh命令连接,并在节点脚本中创建了连接。但是,我收到了一个错误。接受答案下面的评论也有同样的问题:
我正在使用mac终端,我输入'screen',输入您使用我的域名和密码提供的信息,并通过ssh成功连接到我的服务器。但是,当我运行我的server.js节点文件时,问题仍然存在。我收到了:{[错误:连接ECONNREFUSED]代码:'ECONNREFUSED',错误:'ECONNREFUSED',系统调用:'连接',致命:真}我错过了一步吗?我能够在不需要ssh的服务器上使用此代码成功查询。
响应引导我到某个地方,但没有完全解释我需要做什么:
通过ssh连接后,您需要将node.ja应用程序连接到localhost。因为在屏幕中使用ssh命令,您可以在本地计算机上使用mysql服务器创建端口3306
如何“将您的node.js应用程序连接到localhost”?我在远程服务器端看到,我得到了channel 3: open failed: connect failed: Connection refused
。所以某种请求被成功发送到我的远程服务器。但是,有些事情失败了。谷歌搜索让我得到了这个答案:
对拒绝的最简单的解释是,在server.com上,没有任何内容监听localhost端口8783上的连接。换句话说,您尝试隧道连接的服务器软件未运行,或者它是正在运行,但它没有收听该端口。
所以现在我被卡住了。如何让服务器“监听”以便mysql可以通过ssh工作?
谢谢!
答案 0 :(得分:3)
通过ssh的FWIW隧道mysql可以使用mysql2
和ssh2
模块在进程中完成。例如:
var mysql = require('mysql2');
var Client = require('ssh2').Client;
var ssh = new Client();
ssh.on('ready', function() {
ssh.forwardOut(
// source address, this can usually be any valid address
'127.0.0.1',
// source port, this can be any valid port number
12345,
// destination address (localhost here refers to the SSH server)
'127.0.0.1',
// destination port
3306,
function (err, stream) {
if (err) throw err;
var sql = mysql.createConnection({
user: 'foo',
database: 'test',
stream: stream // <--- this is an important part
});
// use `sql` connection as usual
});
}).connect({
// ssh connection config ...
});
此外,由于创建ssh连接存在开销,因此您可能希望创建一个ssh连接池以便更好地重用。