我有大约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
拒绝Connection.不太奇怪,因为它不是MySQL服务器.
我向你们提问:
如何在mysql1.example.com
创建SSH隧道后指定主机?我试过到处寻找,但似乎无法弄明白.
Mad*_*vin 106
解决了!当创建隧道时,事情是连接到正确的服务器 - 应该看到那个即将到来.
ssh -f user@ssh.example.com -L 3307:mysql1.example.com:3306 -N
然后mysql -h 127.0.0.1 -P 3307
按预期工作.:)
小智 15
我有一个关于如何使用SSH隧道连接到MySQL的好博客.这里解释得很清楚.
连接SSH隧道的命令:
ssh -L [listening port]:[REMOTE_MYSQL_HOST]:[REMOTE_MYSQL_PORT] [SSH_USER]@[SSH_HOST]
Run Code Online (Sandbox Code Playgroud)
连接MySQL的命令:
localhost:[listening port]
Run Code Online (Sandbox Code Playgroud)
如果您没有直接访问权限mysql-server
,则使用jump-server
.
从您的机器,您连接(ssh)跳转服务器,然后从那里连接到您的mysql-server
.
这可以通过使用来避免ssh- tunneling
.
假设你的
jump server is `jump-ip`
mysql server is `mysql-ip`
your machine is `machine-ip`
Run Code Online (Sandbox Code Playgroud)
只需打开ssh客户端(Windows中的Putty或linux/ios中的终端).
类型:
ssh -L [local-port]:[mysql-ip]:[mysql-port] [jump-server-user]@[jump-ip]
Run Code Online (Sandbox Code Playgroud)
在此之后,您可以使用localhost
和local-port
直接访问远程计算机上的mysql-server.
例如.你的Jdbc url访问mysql数据库,在这种情况下,将是
jdbc:mysql://localhost:[local-port]/[database-name]
Run Code Online (Sandbox Code Playgroud)
我使用此命令创建了到数据库的隧道
ssh -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f
Run Code Online (Sandbox Code Playgroud)
-L 是本地主机端口,它是用户定义的,您可以提供任何端口号
0 到 65535 之间。0 到 1023 被保留。
无论您是否对服务器使用基于密钥的身份验证,您都应该
像这样提及关键。
ssh -i <path of the private key> -L 10000:localhost:3306 user@<ip addess to connect DB> -N -f
Run Code Online (Sandbox Code Playgroud)