如何本地开发环境直连测试环境数据库

写在前面

千万不要使用此技巧连接生产环境,不然结果会很刺激!!

如果非要这么用,千万记得做好权限控制!!

如果出了问题,请忘掉这篇文章的作者!!

最近经常有连接各个服务器的数据库去调试的需求,又不愿直接登录到对应的服务器改代码,只好研究一些曲线救国的新方法。

事情的经过是这样的,公司的数据库部署在内网,没有开放外网环境,这对于多机器开发的我来说及其蛋疼,如果要保证随时能连数据库,就必须走哪都背着一台10斤重的电脑放飞自我。如果不愿背电脑,就要在我所有的开发环境上啃掉40G的硬盘来导一份数据。

这让我非常难受,于是有一天,在下班路上突然醍醐灌顶,既然数据库客户端都有提供通过SSH隧道连接数据库的方式为什么我不能通过开一条SSH隧道进到公司的开放服务器然后将内网的端口映射出来。

于是经过一番搜索后终于解决了这个问题,下面是正文。

其实过程及其简单,一行命令让世界臣服

ssh -NCPf root@192.168.99.52 -L 3388:192.168.99.52:3306

这条命令的作用是这样的:

-C 使用压缩功能,是可选的,加快速度。

-P 用一个非特权端口进行出去的连接。

-f 一旦SSH完成认证并建立port forwarding,则转入后台运行。

-N 不执行远程命令。该参数在只打开转发端口时很有用(V2版本SSH支持)

比如说你有一个mysql数据库工作在 192.168.99.52 这台机器上,但端口并不向外网开放,这条命令的作用是使用 root 用户登陆到 192.168.99.52 ,然后将这台机器的3306端口forward到你 本机3388 端口上,然后你就可以愉快的在本地使用localhost3388 端口连接到远程服务器上数据库了。

这里要注意 -L 后面跟的是目标机器的内网端口,-p 可以指定SSH登陆的端口,-i 指定登陆所需的密钥,完整命令是这样的

ssh -NCPf 用户@可以SSH到的远程机器URL -L 本机端口:127.0.0.1:远程机器需要映射的端口 -p port -i xxxx/id_rsa

此法可用于一些特殊场景下的调试:

  1. 需要依赖生产环境数据的调试,比如验证报表准确性,验证数据是否正确等
  2. 使用一台公网机器作为跳板访问内网服务

等等

但千万要注意安全!!!切记切记!!!

最后

good good debug, day day up, 感谢您能看到这里,happy coding~

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

令人窒息的操作?

6年前 评论

大佬 怎么取消啊

4年前 评论
Outlaws (楼主) 4年前
qietugou (作者) 4年前

如果有跳板机怎么办?

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!