MySQL 通过 SSH 隧道连接 - 如何指定其他 MySQL 服务器?
Posted
技术标签:
【中文标题】MySQL 通过 SSH 隧道连接 - 如何指定其他 MySQL 服务器?【英文标题】:MySQL connection over SSH tunnel - how to specify other MySQL server? 【发布时间】:2013-08-24 18:22:54 【问题描述】:我有大约 50 个数据库都设置在不同的主机名上,要求我通过 SSH 隧道连接到它们。
例如:
SSH 主机ssh.example.com
mysql 主机mysql1.example.com
我已经设法使用 autossh(运行 Debian 的网络服务器)创建了隧道,但我似乎无法弄清楚如何连接到 SSH 隧道“之外”的特定 MySQL 主机名。
输入 lsof -i -n | egrep '\<ssh\>'
确认隧道正在工作(将端口 3307 发送到 ssh.example.com 端口 3306)
所以当我尝试mysql -h 127.0.0.1 -P 3307
时,我得到连接被拒绝。不太奇怪,因为它不是 MySQL 服务器。
我的问题给你们:
如何在创建 SSH 隧道后指定 mysql1.example.com
主机?我试过到处搜索,但似乎无法弄清楚。
【问题讨论】:
我不熟悉“autossh”,但如果你有一个正在使用的 ssh 隧道,我会说只需将127.0.0.1
替换为实际目标?
@Nanne,感谢您的评论。但是触发隧道需要 127.0.0.1,否则它只会尝试直接连接到远程主机。
【参考方案1】:
解决了!问题是在创建隧道本身时连接到正确的服务器 - 应该已经看到了。
ssh -f user@ssh.example.com -L 3307:mysql1.example.com:3306 -N
然后mysql -h 127.0.0.1 -P 3307
按预期工作。 :)
【讨论】:
-N
选项有什么用?
@abbood -N 选项是只创建隧道,之后仅此而已。
更具体地说,需要指定mysql服务器绑定的地址。在 my.cnf 文件中查找绑定地址。这就是两个冒号分隔符之间的内容。
请注意:在mysql
命令中使用127.0.0.1
很重要,因为如果您使用localhost
,P
参数将被忽略。我花了一些时间才弄清楚这一点。
谢谢!我看到的所有文档都让我觉得你不能,而且 Mysql Workbench 没有使用这样的 ssh 隧道。你(几乎)救了我的命【参考方案2】:
我有一篇关于如何使用 SSH 隧道连接到 MySQL 的不错的博客。很好解释here。
连接SSH隧道的命令:
ssh -L [listening port]:[REMOTE_MYSQL_HOST]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_HOST]
连接 MySQL 的命令:
localhost:[listening port]
【讨论】:
这是一个死链接 必须在-L之前添加-N参数【参考方案3】:当您无法直接访问mysql-server
时,您可以使用jump-server
。
从您的机器上,您连接 (ssh) 到 jump-server,然后从那里连接到您的 mysql-server
。
这可以通过使用ssh- tunneling
来避免。
假设你的
jump server is `jump-ip`
mysql server is `mysql-ip`
your machine is `machine-ip`
只需打开 ssh 客户端(windows 中的 putty 或 linux/ios 中的终端)。
类型:
ssh -L [local-port]:[mysql-ip]:[mysql-port] [jump-server-user]@[jump-ip]
之后,您可以使用您的localhost
和local-port
直接访问远程机器上的mysql-server。
例如。在这种情况下,您访问 mysql 数据库的 Jdbc url 将是
jdbc:mysql://localhost:[local-port]/[database-name]
对于 Windows 用户,使用 Putty 通过隧道连接到远程 MySQL 服务器
第 1 步:在会话选项卡中输入您的 Jump 服务器主机/IP
步骤 2:转到SSH
选项卡--> Tunnels
:输入您的 MySQL 服务器主机名:端口作为目标,源端口作为您要通过该服务建立隧道的本地端口,然后单击 Add
第 3 步:返回会话选项卡并单击 Open
并输入您的凭据,如果它是基于用户名/密码的。
并使用与上述相同的凭据:
jdbc:mysql://localhost:[local-port]/[database-name]
【讨论】:
【参考方案4】:我使用这个命令创建了一个到数据库的隧道
ssh -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f
-L 是本地主机端口它是用户定义你可以提供任何端口号
介于 0 到 65535 之间。保留 0 到 1023。
您是否应该使用基于密钥的服务器身份验证
像这样提及密钥。
ssh -i <path of the private key> -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f
【讨论】:
以上是关于MySQL 通过 SSH 隧道连接 - 如何指定其他 MySQL 服务器?的主要内容,如果未能解决你的问题,请参考以下文章