请问 eggJs 如何使用 tunnel-ssh 连接远程数据库?
发布于 4 个月前 作者 NumerHero 599 次浏览 来自 问答

场景是这样的,由于安全,公司的远程机器 只开放了 ssh 2289 端口, 而mysql 服务所在的 3306被封了

我的egg.js 希望能够访问到远程的库,不知道如何办?

我上网搜索了, 可以使用 tunnel-ssh 创建通道后进行连接,但是很多地方不懂

我在 egg.js/config.default.js 内写了如下代码

config.sequelize = { dialect: ‘mysql’, // support: mysql, mariadb, postgres, mssql database: ‘some platform’, host: ‘127.0.0.1’, port: 3306, username: ‘root’, password: ‘sercet’, };

// if (nowEnv.ip === ‘211.159.232.30’) { const sshConfig = { user: ‘user’, Password: ‘sercet’, host: ‘sercet’, port: 2289, dstHost: ‘sercet’, dstPort: 3306, localHost: ‘127.0.0.1’, localPort: 3306, };

tunnel(sshConfig, function(error, server) { if (error) { console.log(error); } else { // do something } });

目前是 ssh 已经可以连上了,但是无法访问数据服务,报错: image.png
我的问题:

  1. 如何成功连上数据库
  2. dstHost、 dstPort、localHost、localPort 等字段是什么意思,不太熟悉
3 回复
            const tunnelConfig = {
                username: config.mongodb_prod.serverUserName,                           //远程服务器 用户名
                host: config.mongodb_prod.remoteAddress,                                //远程服务器地址
                dstHost: config.mongodb_prod.dbHost,                                    //数据库地址
                dstPort: 27017,                                                         //数据库 端口
                port: 22,                                                               //远程服务器ssh 端口
                privateKey: require('fs').readFileSync('/yun_prod_new.prod'),           //私钥 
                passphrase: 'secret',                                                   //可能是 登陆模式? 密钥登陆?
                keepAlive: true,                                                        //是否保持连接
                localPort: config.mongodb_prod.localPort                                //映射的本地端口
            }

之前写的 我用到的配置的字段,可以参考一下…我理解的是这样子的,当时也纠结了好久…

本地开个ssh隧道不就得了,别用库,直接ssh开,映射到本地直接连

ssh -L 3306:x.x.x.x:3306 x.x.x.x

@AnzerWall 我去尝试一下,但是我还是想知道 tunnel-ssh 这个库怎么在eggjs 下使用 我弄了1上午,依然报上面的错误

网上搜索回复的资料也比较少

回到顶部