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

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

例如:

  • ssh.example.com的 SSH 主机

  • mysql1.example.com上的 MySQL 主机

我已经设法使用 autossh (运行 Debian 的 Web 服务器)创建了这个通道,但是我似乎不知道如何在 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主机?我到处都找过了,还是没找到。

72123 次浏览

解决了!事情是连接到正确的服务器时,创建隧道本身-应该看到这一点来。

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

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

我有一个很好的博客关于如何使用 SSH 隧道连接到 MySQL。

连接到 SSH 隧道的命令:

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

连接到 MySQL 的命令:

localhost:[listening port]

当您不能直接访问 mysql-server时,可以使用 jump-server

在您的机器上,您连接(ssh)到跳转服务器,然后从那里连接到 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 通过隧道连接到远程 MySQLServer

步骤1: 在会话选项卡中输入跳转服务器 Host/IP Step1

步骤2: 转到 SSH选项卡—— > Tunnels: 输入您的 MySQL 服务器 HostName: Port 作为目的地,Source Port 作为本地端口,在这里您希望隧道该服务并单击 Add Step2

步骤3: 返回 Session 选项卡,单击 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