注意:以下内容的前提是,你已经配好了SSH KEY登录远程服务器,且禁止了password登录,否则,以下做法很危险。

假设:

远程mysql服务器地址为: 3.3.3.3

本机地址为:192.168.0.1

建立SSH隧道连接

原理是利用ssh命令在本机开个端口,这个端口为隧道的入口端口,通过SSH隧道转发端口达到访问远程mysql服务。简单来说,可以理解为本地端口到远程服务器端口的一个映射,而中间靠的就是SSH,利用SSH KEY验证登录可以使得用户可以安全连接远程服务。。废话少说,这里以本机3388端口为例子,请看:

# 参数解释
# -C    使用压缩功能,是可选的,加快速度。
# -P    用一个非特权端口进行出去的连接。
# -f    一旦SSH完成认证并建立port forwarding,则转入后台运行。
# -N    不执行远程命令。该参数在只打开转发端口时很有用(V2版本SSH支持)
ssh -NCPf root@3.3.3.3 -L 3388:192.168.0.1:3306

这里的root@3.3.3.3 是登陆mysql这个远程服务器的SSH用户名和IP地址-L 3388:192.168.0.1:3306 这个参数的意思是说在本机开放IP为192.168.0.1,端口为3388到 IP为3.3.3.3,端口为3306的映射,也就是说隧道的入口为3388出口为mysql服务器的3306。。。如果你的IP不是你设定的这个192.168.0.1就会被远程服务器拒绝。。你可能会问,我是拨号连接的,IP常常要变怎么办。。。放心,你可以设置为任意IP,只要把192.168.0.1这个IP写成0.0.0.0就可以了,系统就知道是任意ip都可以连接了。。。

执行完后查看本地连接情况

netstat -tulnp | grep 3388 tcp    0    0 127.0.0.1:3388    0.0.0.0:*    LISTEN    14273/ssh tcp    0    0 ::1:3388    :::*    LISTEN    14273/ssh

通过隧道连接MySQL服务器测试一下

mysql -u dbname -P 3388 -h 127.0.0.1 -pdbpwd

如果登录进去了,就说明成功了!