【问题标题】:MySQL connection over SSH tunnel - how to specify other MySQL server?MySQL 通过 SSH 隧道连接 - 如何指定其他 MySQL 服务器?
【发布时间】: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,否则它只会尝试直接连接到远程主机。

标签: mysql ssh-tunnel


【解决方案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 很重要,因为如果您使用localhostP 参数将被忽略。我花了一些时间才弄清楚这一点。
  • 谢谢!我看到的所有文档都让我觉得你不能,而且 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]

之后,您可以使用您的localhostlocal-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
    

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2018-10-06
      • 2012-06-19
      • 2019-08-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2016-11-18
      相关资源
      最近更新 更多