68

我有大约 50 个数据库都设置在不同的主机名上,要求我通过 SSH 隧道连接到它们。

例如:

  • SSH 主机位于ssh.example.com

  • MySQL 主机位于mysql1.example.com

我已经设法使用 autossh(运行 Debian 的 Web 服务器)创建了隧道,但我似乎无法弄清楚如何连接到“超出”SSH 隧道的特定 MySQL 主机名。

键入lsof -i -n | egrep '\<ssh\>'确认隧道正在工作(将端口 3307 发送到 ssh.example.com 端口 3306)

因此,当我尝试mysql -h 127.0.0.1 -P 3307连接被拒绝时。不太奇怪,因为它不是 MySQL 服务器。

我对你们的问题:

mysql1.example.com创建 SSH 隧道后如何指定主机?我试过到处搜索,但似乎无法弄清楚。

4

4 回答 4

133

解决了!问题是在创建隧道本身时连接到正确的服务器 - 应该已经看到了。

ssh -f user@ssh.example.com -L 3307:mysql1.example.com:3306 -N

然后mysql -h 127.0.0.1 -P 3307按预期工作。:)

于 2013-08-22T07:18:20.097 回答
16

我有一篇关于如何使用 SSH 隧道连接到 MySQL 的不错的博客。这里解释得很好。

连接 SSH 隧道的命令:

ssh -L [listening port]:[REMOTE_MYSQL_HOST]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_HOST]

连接 MySQL 的命令:

localhost:[listening port]
于 2016-01-28T11:25:43.330 回答
16

当您无法直接访问 时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]

在此之后,您可以使用您的localhostandlocal-port直接访问远程机器上的 mysql-server。

例如。在这种情况下,您访问 mysql 数据库的 Jdbc url 将是

jdbc:mysql://localhost:[local-port]/[database-name]

对于 Windows 用户,使用 Putty 通过隧道连接到远程 MySQL 服务器

第 1 步:在会话选项卡中输入您的 Jump 服务器主机/IP 步骤1

第2步:转到SSH选项卡-> Tunnels:输入您的MySQL服务器主机名:端口作为目标,源端口作为您要在其中隧道该服务的本地端口,然后单击Add 第2步

第 3 步:返回会话选项卡并单击Open并输入您的凭据,如果它是基于用户名/密码的。

并使用与上述相同的凭据:

jdbc:mysql://localhost:[local-port]/[database-name]
于 2017-09-07T12:02:10.503 回答
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
于 2017-12-19T09:38:22.970 回答