ssh 端口转发:无法通过隧道连接到第三台服务器

ssh 端口转发:无法通过隧道连接到第三台服务器

我想ip=1.0.0.3从我的桌面 (A; ip=1.0.0.1) 通过另一台服务器 (B; ) 连接到服务器 (C; 1.0.0.2)。我必须进行端口转发才能从我的桌面在服务器 C 上远程运行 ipython 笔记本,并且无法直接访问。这应该很简单:

ssh -NfL localhost:2023:1.0.0.3:2021 [email protected]

请注意,我已经在 上运行了jupyter notebook使用端口。但这不起作用。令人惊讶的是,如果我分两步进行操作,一切都很顺利:20211.0.0.3

  1. 在 A:ssh -L localhost:2023:localhost:2022 [email protected]
  2. 然后在 B 上:ssh -L localhost:2022:localhost:2021 1.0.0.3

有人能帮我用一个命令完成所有操作吗?我完全糊涂了,因为上面提到的单个代码曾经在另一个网络系统(不是这些服务器)上运行。

答案1

也许服务器 B 的管理员已PermitOpen localhost:*在其/etc/ssh/sshd_config文件中进行了设置?这将限制传入端口转发的远程端ssh -L仅到本地主机。

请注意,当您使用时,只有转发连接(从 A 到 B)的第一跳通过 SSH 加密:从 B 到 C 的端口 2021 的连接将是纯 TCP,不受 SSH 加密的保护。ssh -NfL localhost:2023:1.0.0.3:2021 [email protected]

使用两步法,转发连接的两个跳转都将在加密的 SSH 隧道内。如果有避免未加密连接的策略要求,服务器 B 的管理员可以添加上述sshd_config设置以强制合规。

如果您的版本ssh足够新,可以支持ProxyJump配置选项,您可能能够使用单个命令设置等效的两步连接(就端口转发而言):

ssh -J [email protected] -NfL localhost:2023:localhost:2021 [email protected]

这可能很难理解,但它的工作原理是这样的:

ssh ... [email protected]   # this defines what we want to think as the "main" SSH 
                       # connection: the remote end of the port forwarding 
                       # tunnel(s) will be at 1.0.0.3 (C)

-J [email protected]        # ... but use [email protected] as an intermediate
                       # step for everything, including...

-NfL localhost:2023:localhost:2021 
                       # ... the port forwarding tunnel from
                       # the local (A) localhost:2023 to the
                       # ultimate remote's (C) localhost:2021 

与两步法相比,ssh -J/还有一个额外的优势:您不必向主机 B 提供任何 SSH 私钥来自动执行 B -> C 步骤,因为所有身份验证凭据都将直接由主机 A 提供。ProxyJump

相关内容