我的设置中有 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