如何在ssh上使用node的mysql库(在Mac上)?谷歌搜索后,我仍然得到“通道3:打开失败:连接失败:连接被拒绝”

时间:2016-09-21 20:28:16

标签: mysql node.js ssh

从头开始,我用谷歌搜索了如何使用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。所以某种请求被成功发送到我的远程服务器。但是,有些事情失败了。谷歌搜索让我得到了这个答案:

SSH -L connection successful, but localhost port forwarding not working "channel 3: open failed: connect failed: Connection refused"

  

对拒绝的最简单的解释是,在server.com上,没有任何内容监听localhost端口8783上的连接。换句话说,您尝试隧道连接的服务器软件未运行,或者它是正在运行,但它没有收听该端口。

所以现在我被卡住了。如何让服务器“监听”以便mysql可以通过ssh工作?

谢谢!

1 个答案:

答案 0 :(得分:3)

通过ssh的FWIW隧道mysql可以使用mysql2ssh2模块在​​进程中完成。例如:

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连接池以便更好地重用。