比较特别的 SSH 端口转发的问题

2018-01-22 10:33:21 +08:00
 frostnotfall

需求比较简单,一句话就可以描述: A 通过 B 连接 C 的 3306 端口

但是具体是实现就比较麻烦了,实际上是被搞得特别乱,本地端口转发和远程端口转发网上说的都不太明朗,求助大家 如何在 A 上执行一条命令实现呢?

3931 次点击
所在节点    程序员
17 条回复
lairdnote
2018-01-22 10:39:04 +08:00
ssh -L localhost:3306:C:3306 xxx@B ip
EricInBj
2018-01-22 10:43:40 +08:00
如果你有 B 的 SSH 权限,可以在 A 上执行:

```
ssh -NfCL 0.0.0.0:3306:C_IP:3306 root@B_IP

```
这样你就可以在 A 上,连接 A 机的 3306 端口,达到访问 C 上的 3306 端口的目的。
同样,不管是 D 机 E 机还是啥机,只要是能访问到 A 机的,也都可以通过 A 机的 3306 访问到 C。
如果不希望别的机通过 A 访问 C,那就把上面命令中的 0.0.0.0 换成 127.0.0.1 吧。
mawenjian
2018-01-22 10:44:47 +08:00
在 B 机上装个 socat 做转发
EricInBj
2018-01-22 10:44:52 +08:00
@lairdnote 发完发现大胸弟已经回答了。。。
frostnotfall
2018-01-22 10:49:30 +08:00
@lairdnote #1 解决了,问题出在了 localhost 上,端口绑定到了 127.0.0.1 上,导致其他机器连接不了
warcraft1236
2018-01-22 10:51:54 +08:00
给你贴出来我目前用的

alias testsql="ssh -J vps -NL 13500:xx.xx.xx.xx:3306 -i ~/Downloads/text.pem xx.xx.xx.xx"

第一个 xx.xx.xx.xx 是 MySql 所在的机器 IP,第二个 xx.xx.xx.xx 是跳板机 IP
warcraft1236
2018-01-22 10:53:16 +08:00
@warcraft1236

vps 是我自己 fq 用的 vps

这个命令的作用就是,通过我的 vps 作为代理,连接到跳板机上然后连接到 MySql 服务器上。原因是跳板机在 aws 上,经常爆炸
frostnotfall
2018-01-22 10:54:37 +08:00
@warcraft1236 #6 不错的思路
falcon05
2018-01-22 10:55:36 +08:00
这一点也不特别……
xderam
2018-01-22 11:01:32 +08:00
或者 proxycommand 似乎也能解决,但比直接-L 貌似更难理解。
frostnotfall
2018-01-22 11:02:34 +08:00
@falcon05 #9 看了二楼才发现真的不特别,哈哈(捂脸淘)
ywgx
2018-01-22 11:08:53 +08:00
B 机器部署一个 Nginx, 经过 stream 四层转发 C 的 3306 端口即可, 这样从 A 远程连 B 的 3306 端口达到目的

stream{
upstream mysql {
server xx.xx.xx.xx:3306;
}
server {
listen 3306;;
proxy_pass mysql;
}
wizardoz
2018-01-22 12:11:09 +08:00
ssh -L 10022:C:22 user@B
wekw
2018-01-22 13:53:05 +08:00
Nginx +1
JoyHao
2018-01-22 14:04:01 +08:00
Nginx +2
loadinger
2018-01-22 14:06:10 +08:00
所以你们都把 22 伪装成 mysql 来“骗人”吗。。
pigzilla
2018-01-22 14:12:01 +08:00
这个需求要说明 BC 两者哪个方向是可以直连的。

如果仅 B 可以直连 C,那在 B 上 SSH 连接到 C 时做 Local Forwarding。或者在 B 上用任意端口转发 /隧道方案如 netcat,socat,iptables,spiped 等都可以。

如果仅 C 可以直连 B,那在 C 上 SSH 连接到 B 时做 Remote Forwarding 即可。或者在 C 上发起隧道连接。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX