如何通过本地SSH隧道端口转发访问远程mysql服务
注意:以下内容的前提是,你已经配好了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
如果登录进去了,就说明成功了!