[英]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]
之后,您可以使用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]
我使用此命令创建了一条通往数据库的隧道
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.