通过反向 SSH 隧道直接进行 SSH 隧道

通过反向 SSH 隧道直接进行 SSH 隧道

我有 3 台电脑:

  • A 位于防火墙后面,无法从本地网络外部访问
  • B 在 A 网络之外,有公共 DNS,但看不到 A
  • C 是一台没有公共 DNS 且经常更改 IP 的笔记本电脑

我想创建一个从 A 到 B 的反向 ssh 隧道,以便允许 C 通过 B 到达 A。我阅读了一些指南并遵循了以下步骤,但我做错了。

我尝试回顾一下所做过的事。

在 A 上执行此操作

ssh -Nfg -R 2210:localhost:22 userB@B

允许我从 B 到达 A

ssh -p 2210 userA@localhost

要从 CI 到达 A,可以在 C 上执行

ssh userB@B
ssh -p 2210 userA@localhost

到目前为止,一切看起来都很好。现在我想直接从 C 连接到 A。这不是偷懒,但(我认为)需要使用 FileZilla 从 C 连接到 A。

我回到步骤 1 并在 A 上执行:

ssh -Nfg -R :2210:localhost:22 userB@B

(请注意 2210 之前的“:”)

我还编辑了 B 上的 /etc/ssh/sshd_config 文件,并在末尾添加了内容。

GatewayPorts yes

但是在 C 上做

ssh -p 2210 userA@B

返回超时错误。

我哪里做错了?

非常感谢

PS:还有另一种方法,打开隧道并允许 FileZilla 从 C 连接到 A 也可以。

答案1

感谢 UbuntuForum 上的 Lars Noodén 的帮助,此问题已得到解决这里

我向未来的读者报告解决方案:

您已经创建了从 A 上的端口 22 到 B 上的端口 2210 的反向隧道。添加从 C 上的任意端口(例如 2212)到 B 上的端口 2210 的常规隧道。

ssh -L 2212:localhost:2210 userB@hostB

然后在 C 上,您可以将 FileZIlla 或任何其他 SFTP 客户端指向本地主机的端口 2212,它将连接到 A。

使用此解决方案,我可以轻松地ssh -p 2212 userA@localhost在 C 上从 C 直接连接到 A。此外,我可以使用本地主机上的端口 2212 来执行从 C 连接到 A 所需的所有不允许隧道的服务(例如 Filezilla)。

相关内容