![两台机器之间的 SSH 隧道只能 ssh 到第三台机器,但不能直接相互连接](https://linux22.com/image/177706/%E4%B8%A4%E5%8F%B0%E6%9C%BA%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%20SSH%20%E9%9A%A7%E9%81%93%E5%8F%AA%E8%83%BD%20ssh%20%E5%88%B0%E7%AC%AC%E4%B8%89%E5%8F%B0%E6%9C%BA%E5%99%A8%EF%BC%8C%E4%BD%86%E4%B8%8D%E8%83%BD%E7%9B%B4%E6%8E%A5%E7%9B%B8%E4%BA%92%E8%BF%9E%E6%8E%A5.png)
我的设置中有 3 台机器:
M1 M2 M3
- 我需要在 M1 上打开控制 M3 的 SSH shell。
- M1 和 M3 位于不同的防火墙后面,无法直接到达对方。
- M1 和 M3能到达(并通过 ssh 连接)到 M2。但反之则不然 - M2 无法到达 M1 或 M3。
我可以使用M2创建从M1到M3的隧道吗?
M1 --> M2 <-- M3
\____________^
答案1
从M3
ssh -R localhost:2602:localhost:22 user@M2
从M1
ssh -L localhost:2602:localhost:2602 user@M2
现在你可以从M1直接连接到M3(这里localhost实际上是指M3)
ssh user@localhost -p 2602
答案2
我用-J
(我记得它是“Jump”)来做到这一点。
M1 -> M3(通过 M2):
ssh -J M2 M3
scp
也支持类似的东西:
scp --ProxyJump=M2 localfile M3:remotefile
我认为用 IP 来解释是最简单的:
M1 = 192.168.1.100
M2 = 192.168.1.101 & 10.10.1.200
M3 = 10.10.1.201
M1 无法访问10.10.1.x
,因此必须通过 M2 访问两个网络。假设每台计算机上都有不同的用户,这会增加复杂性。从 M1 到 M3 的 SSH:
[email protected]: ~ $ ssh -J [email protected] [email protected]
或remotefile
从 M3 前往 M1:
scp [email protected] [email protected]:remotefile localfile