Tag 杂文

与世界分享我刚编的转发ntunnel_mysql.php的工具

Category 杂文
Tag 杂文
Posted on
View

背景

先说背景吧,我司目前是通过phpMyAdmin来操作mysql,phpMyAdmin每次都要输入账号密码,而且我们的数据库实例又非常多,每次登录还要先搜索一番。虽然搞了一些chrome插件来简化这个过程,但是个人还是不太满意,所以考虑使用桌面客户端来代替。 然而测试环境的mysql是无法直连的,虽然有些桌面客户端(比如navicat)提供了ssh隧道或者http代理来连接,但是我们开发机只开放了http server的端口,没有开放ssh(只能通过跳板机连接)。所以一些桌面客户端直连和通过ssh隧道来连接是不可能了,http代理方式倒是可以连接,但是貌似只有navicat提供了这个功能,而navicat是收费的。得,所有常规道路都不通了。 只能靠骚操作了

方案

1、内网穿透!把内网ssh服务暴露到公网去!

image.png 如上图 1. 首先开发机上agent进程同时连接代理服务器proxy server与本地ssh,做双向转发 2. 然后代理服务器proxy server监听来自我的mac上的桌面客户端的ssh隧道连接,做该连接和proxy server <=> agent这个tcp连接的双向转发 3. 这样mac上的桌面客户端就能建立到内网开发机的ssh隧道了 很好!我们现在就能通过ssh隧道连接到测试环境mysql了! 不过,过不了多久我们可能会遇到下面的情况↓↓↓

2、用http隧道代理tcp连接进而在80端口上提供ssh服务

先简单提下http隧道的原理吧: 1. 首先客户端会发放CONNECT请求给代理服务器,告诉代理服务器它要连接的目标ip+port 2. 代理服务器建立与目标ip+port的tcp连接然后返回给客户端HTTP 200 Connection Established报文 3. 这时候就建立起了连接,后续客户端到代理服务器的所有tcp报文都会被代理服务器转发到目标ip+port的tcp连接上 > 详情可以参考这篇文章:HTTP 隧道代理原理和实现 这个方案存在以下两个问题: 第一、80端口被nginx监听,而nginx不支持http tunnel,虽然有些插件可以实现,但是考虑到开发机许多同学都在使用,添加插件还是有风险的。 第二、与方案1同样的,偷开放ssh服务这件事就不能干🙈

3、做一个mysql server,解析客户端请求转发到http代理

先看图: image.png 在我的mac上起一个服务:hersql,“伪装”成mysql server,接收来自桌面客户端的连接,按照mysql协议从报文中解析出请求的dbsql,然后请求开发机上的navicat提供的代理工具:ntunnel_mysql.phpntunnel_mysql.php连接到db并执行sql,将结果返回给hersqlhersql将查询结果按照mysql协议包装成报文返回给桌面客户端。 完美!

hersql

在方案3中我实现了hersql并开源到了github: github.com/Orlion/hersql,供大家借鉴

...

阅读全文 »

keynote中插入高亮代码的方法

Category 杂文
Tag 杂文
Posted on
View

直接复制vscode中的代码到keynote中效果惨不忍睹,经过一番搜索,发现了一种效果很好的方法,而且keynote中可编辑

1. 安装highlight

$ brew install highlight

2. 复制要插入的代码

3. 执行以下命令

$ pbpaste | highlight --syntax=go --style=github -k "Fira Code" -K 36 -u "utf-8" -t 4 -O rtf | pbcopy
  • –syntax 指定代码语法格式
  • -u 指定编码,否则中文会乱码
  • –style 指定高亮的样式
  • -K 指定代码的字大小

实际效果

image.png

...

阅读全文 »