首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建从跳转主机到数据库的SSH隧道,并在跳转主机端口上访问数据库

创建从跳转主机到数据库的SSH隧道,并在跳转主机端口上访问数据库
EN

Stack Overflow用户
提问于 2020-04-20 02:11:17
回答 1查看 574关注 0票数 2

我正在尝试创建一个运行服务器端口的数据库和另一个服务器之间的SSH隧道,如下所示。

MySQL:3306 <=====> Server-A:3306

并且我想使用Server-A:3306作为连接到数据库的数据库URI。

我在ServerA上运行以下代码

ssh -f -N -i ~/keys/test.pem foo@foo.storesandbox.com -L5001:127.0.0.1:2001

我可以看到隧道已经启动并运行。但是当我使用Server-A的公网IP并尝试连接到数据库时,它不起作用。

如果我在服务器A和运行MySQL客户端的位置之间创建另一个隧道。然后它就起作用了。但我不想这么做。

导致此问题的原因是什么?我对脚本编程相当陌生。

EN

Stack Overflow用户

回答已采纳

发布于 2020-04-20 14:34:45

默认情况下,当您使用如下命令时,本地端(ssh客户端)在地址为127.0.0.1的环回接口上创建侦听端口

代码语言:javascript
复制
ssh me@server -L3306:localhost:3306

如果您在主机上检查netstat,您将看到如下所示

代码语言:javascript
复制
sudo netstat -ntlp | grep 3306
tcp  0 0 127.0.0.1:3306  0.0.0.0:*   LISTEN 12354/ssh

因此,本地节点上的应用程序可以连接到此类映射服务,因为环回接口对主机本身是可见的,但外部节点无法访问此虚拟接口,因此无法与侦听此单个接口的任何服务(端口)建立任何连接。

要指示本地ssh客户端与世界共享此类映射端口,您需要指示它绑定到所有接口(包括环回)或仅绑定到特定接口

代码语言:javascript
复制
# here you explicitly tell ssh client to accept connection to your tunnel
# from any client(i.e. bind listenning port to all interfaces)
ssh me@server -L0.0.0.0:3306:localhost:3306 
sudo netstat -ntlp | grep 3306 
tcp  0 0 0.0.0.0:3306   0.0.0.0:*   LISTEN 12354/ssh

#here you do the same thing by using -g option
ssh me@server -g -L3306:localhost:3306
sudo netstat -ntlp | grep 3306 
tcp  0 0 0.0.0.0:3306   0.0.0.0:*   LISTEN 12354/ssh

#and here is an example of how to bind to specific interfaces only
# 10.0.0.12 is an IP of one of interfaces on your node
# 10.1.0.156 is also IP address of one interfaces of your node
ssh me@server -L10.0.0.12:3306:localhost:3306 -L10.1.0.156:3306:localhost:3306

sudo netstat -ntlp | grep 3306
tcp  0 0 10.0.0.12:3306   0.0.0.0:*   LISTEN 12354/ssh
tcp  0 0 10.1.0.156:3306  0.0.0.0:*   LISTEN 12354/ssh
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61309319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档