场景是这样的,由于安全,公司的远程机器 只开放了 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 已经可以连上了,但是无法访问数据服务,报错:
我的问题:
- 如何成功连上数据库
- dstHost、 dstPort、localHost、localPort 等字段是什么意思,不太熟悉
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上午,依然报上面的错误
网上搜索回复的资料也比较少