通过反向 SSH 隧道的直接 ssh 隧道

Luc*_*uca 5 ssh networking

我有 3 台电脑:

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

我想创建一个从 A 到 B 的反向 ssh 隧道,以便让 C 通过 B 到达 A。我阅读了一些指南并遵循了程序,但我做错了什么。

我试着回顾一下已经做了什么。

在 A 上执行此操作

ssh -Nfg -R 2210:localhost:22 userB@B
Run Code Online (Sandbox Code Playgroud)

允许我在 B 上从 B 到达 A

ssh -p 2210 userA@localhost
Run Code Online (Sandbox Code Playgroud)

从 CI 到达 A 可以在 C 上做

ssh userB@B
ssh -p 2210 userA@localhost
Run Code Online (Sandbox Code Playgroud)

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

我回到步骤 1 并在 A 上做:

ssh -Nfg -R :2210:localhost:22 userB@B
Run Code Online (Sandbox Code Playgroud)

(注意 2210 之前的“:”)

我还在最后添加了 B 上的 /etc/ssh/sshd_config 文件。

GatewayPorts yes
Run Code Online (Sandbox Code Playgroud)

但是在 C 上做

ssh -p 2210 userA@B
Run Code Online (Sandbox Code Playgroud)

返回超时错误。

我哪里做错了?

非常感谢

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

Luc*_*uca 2

感谢 UbuntuForum 上的 Lars Nood\xc3\xa9n 的解决

\n\n

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

\n\n
\n

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

\n\n

ssh -L 2212:localhost:2210 userB@hostB

\n\n

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

\n
\n\n

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

\n