使用PuTTY进行多跳隧道

使用PuTTY进行多跳隧道

如何配置 Putty 以进行 3 跳 SSH 隧道连接?我知道如何配置 Putty 以进行 2 跳 SSH 隧道连接,但现在我正在寻找一种使用 3 跳进行配置的方法。有人可以向我解释如何实现它的过程吗?

对于两跳,我遵循下面的方法。

Windows 10(Putty)--> Linux 计算机 1(192.168.1.100)--> Linux 计算机 2(192.168.1.150)

  • 在会话窗口中给出目标地址(192.168.1.150)和端口 22。
  • 在代理选项中,我给出了中间服务器IP(192.168.1.100)和端口22。
  • 对于 telnet 命令,我给出了以下内容。

plink -agent -l%用户%代理主机-nc%主机:%端口

上述设置对于 2 跳来说运行良好。但现在我的需求是 3 跳 SSH 隧道。如何修改当前隧道并添加 1 跳?

答案1

目前尚不清楚您是否只是想连接到与 Linux Machines 1/2 位于同一网络上的附加机器,或者是否需要跳转到它们之外的另一个网络(例如 172.22.1.x 上的机器 4)。

如果你只是想访问与 Linux Machine 1/2 位于同一 192.168.1.x 网络上的另一台机器,请使用实际的SSH 隧道(在 PuttyConnection -> SSH -> Tunnels菜单下找到)。您可以根据需要为任意数量的机器设置多个隧道。

如果您实际上试图访问第三个网络,则可以打开另一个 Putty 实例,该实例通过原始 Putty 实例上定义的隧道进行连接。

  • 在 Putty 中定义一个隧道,将本地计算机上的端口(例如 2222)转发到 Linux Machine2 上的端口 22
  • 然后在使用该隧道的 Windows 计算机上打开另一个 Putty 实例(即连接到 Localhost:2222)并定义一个新隧道以将附加端口(例如 2223)转发到 Machine4 上的端口 22(您的第 3 跳)。
  • 再打开一个 Putty 实例并连接到 Localhost:2223 以访问 Machine4

我只用 2 跳做过这个,所以我不知道它的表现如何。这不是一个理想的解决方案,但如果这是你唯一的选择,它可能会起作用。

编辑:如果你不仅限于 Windows/Putty,这个(透明多跳 SSH)可以做你想做的事。如果你仅限于 Windows,赛格威可能有一些更灵活的 SSH 工具。

答案2

使用PuTTY进行多跳隧道

PuTTY -> jHost1 (jIP1) -> jHost2 (jIP2) -> 目标 (dIP)

快速回答:

您的方法是正确的,只需使用到 jHost1 的 plink 作为到 jHost2 的 plink 的本地代理:

plink user2@jHost2 -nc dIP:dPort -proxycmd "plink user1@jIP1 -loghost jHost1 -nc jIP2:jPort2"

更多详细说明和注意事项:

  1. 使用-t(在两个链接中),以便您的终端信号工作(因为你没有在跳转主机上调用远程 shell)

  2. 纯文本密码(在命令行/PuTTY 配置中)何时-l user -pw password使用(如果使用 PuTTY 占位符 %proxypass 则无关紧要)。

    • 用于-i指定没有密码的私钥(因为 PuTTY 使用标准 I/O,您将​​无法输入它)
    • 或使用-agentPageant 中的密钥
    • -a由于 plink 在本地运行,因此不需要代理转发( )。
  3. 首次从命令行运行 plinks,查看是否没有其他问题。通常,您会得到一个“传入数据包在解密时出现乱码“错误,如果 plink 要求您导入 jHost 的 SSH 密钥。

  4. jHost注意和的用法jIPjHost我的意思是逻辑主机名用于 plink 的“known_hosts”键查找(Windows 注册表中的 PuTTY 存储)。jIP是从当前跃点可访问的下一跳的名称/IP。(您通常是从无法解析的其他网络连接jHost。)

    • 外部 plink 可以简单使用,jHost2因为连接是代理的,并且根本没有 DNS 查找。
    • 内部 plink 必须使用jIP1进行连接,-loghost jHost1以进行本地密钥查找并将-nc jIP2:jPort2NetCat 连接到下一跳。
  5. 如果你需要使用TCP 转发在目标(必须允许)上,您唯一需要做的就是在 PuTTY 中将其配置为根本没有跳转主机。这是因为到目标的 SSH 连接通过 jHost2 建立隧道,而此连接又通过 jHost1 建立,而跳转主机无法洞察隧道。

    • 与仅仅通过 ssh 访问跳转主机并再次运行 ssh 到达目的地相反,您需要使用<enter>~C<enter>序列转至跳转主机的 ssh 客户端并使用-L/-R命令动态添加隧道。

无 TCP 转发

plink -ncssh -W等效)是一个通过跳转主机 TCP 转发其标准 I/O 的本地代理。如果您无法在跳转主机上允许 TCP 转发,作为一种有限的解决方法,您可以 ssh 并在“连接 -> SSH -> 远程命令”中jHost1使用,ssh user2@jHost2 -t ssh user@Destination而无需代理设置。

这样,您就可以在跳转主机上启动一个新的 ssh 客户端(并且必须存在密钥/重新输入密码/转发代理、复制配置/known_hosts...)。

相关内容