我有 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)。