繁体   English   中英

通过 SSH 隧道的 MySQL 连接 - 如何指定其他 MySQL 服务器?

[英]MySQL connection over SSH tunnel - how to specify other MySQL server?

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

例如:

  • ssh.example.com SSH 主机

  • MySQL 主机在mysql1.example.com

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

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

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

我想问大家的问题:

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

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

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

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

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

连接SSH隧道的命令:

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

连接MySQL的命令:

localhost:[listening port]

当您无法直接访问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 第1步

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

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

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

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

我使用此命令创建了一条通往数据库的隧道

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

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

例如:

  • ssh.example.com SSH主机

  • MySQL主机位于mysql1.example.com

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

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

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

我对你们的问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM