视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQLWorkbench使用SSHTunnel连接MySQL数据库
2020-11-09 12:56:46 责编:小采
文档


在2010年用Amazon AWS时,就用过ssh命令来建立一个SSH Tunnel,然后本地配置为代理就可以无障碍访问互联网了。 现在连接一个IDC的MySQL服务器时,由于网络的隔离性,需要ssh到一台跳板机上才能直接访问MySQL,而我想在本地使用MySQLWorkbench这样的客户端直

在2010年用Amazon AWS时,就用过ssh命令来建立一个SSH Tunnel,然后本地配置为代理就可以无障碍访问互联网了。
现在连接一个IDC的MySQL服务器时,由于网络的隔离性,需要ssh到一台跳板机上才能直接访问MySQL,而我想在本地使用MySQLWorkbench这样的客户端直接连接到MySQL中。其解决方案是,先用ssh命令建立一个SSH Tunnel,然后MySQLWorkbench只需要连接本地的一个端口,即可与对应的远程MySQL建立连接。

假设跳板机为:192.168.1.1 (它可以与MySQL连通)
MySQL IP为:10.1.0.58 端口为:3306
建立SSH Tunnel的命令如下:

# 建立SSH Tunnel
jay@Jay-Air:~ $ssh -f jay@192.168.1.1 -L 2001:10.1.0.58:3306 -N
Warning: Permanently added '192.168.1.1' (RSA) to the list of known hosts.
jay@192.168.1.1's password: 
 
# 查一下在后台运行的ssh进程
jay@Jay-Air:~ $ps -ef | grep 'ssh -f' | grep -v grep
 501 9729 1 0 6:10PM ?? 0:00.19 ssh -f jay@192.168.1.1 -L 2001:10.1.0.58:3306 -N

ssh命令中,-f 表示让ssh在执行命令(这里没有配置执行任何命令)之前进入后台运行状态; -L 指定本地的一个端口(如这里的2001),它将会被转发到远程IP的一个端口(如:10.1.0.58:3306);-N 表示不执行远程命令,对于只做端口转发的场景非常有用。

在MySQLWorkbench中,将原来连接MySQL的IP和端口,配置为设置的本地SSH Tunnel即可(这里设置的是:localhost:2001)

补充说一下,在MySQLWorkbench中一直使用是正常的,而在用mysql命令连接时遇到了问题,如下:

jay@jay-linux:~$ mysql -P 2001 -u qa -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'qa'@'localhost' (using password: YES)

出现这个原因是,这样的命令默认连接localhost,会默认使用Unix socket方式连接;而使用SSH Tunnel这种情况应该使用TCP协议连接。
(mysql官网中的原文:For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. )
所以,解决方法有如下两种:
1. 在mysql命令中添加“–protocol=TCP”参数指定连接协议,命令为:mysql -P 2001 -u qa -p –protocol=TCP
2. 将用127.0.0.1 IP来代替默认的localhost,命令为:mysql -h 127.0.0.1 -P 2001 -u qa -p

另外,参考资料中的第二个,讲了如何在Windows下用putty设置建立SSH Tunnel。

参考资料:

http://www.revsys.com/writings/quicktips/ssh-tunnel.html

http://davidngos.blogspot.com/2013/06/how-to-use-mysql-workbench-behind.html

http://dev.mysql.com/doc/refman/5.6/en/connecting.html

Original article: MySQLWorkbench使用SSH Tunnel连接MySQL数据库

©2014 笑遍世界. All Rights Reserved.

下载本文
显示全文
专题