如何配置 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"
更多详细说明和注意事项:
使用
-t
(在两个链接中),以便您的终端信号工作(因为你没有在跳转主机上调用远程 shell)有纯文本密码(在命令行/PuTTY 配置中)何时
-l user -pw password
使用(如果使用 PuTTY 占位符 %proxypass 则无关紧要)。- 用于
-i
指定没有密码的私钥(因为 PuTTY 使用标准 I/O,您将无法输入它) - 或使用
-agent
Pageant 中的密钥 -a
由于 plink 在本地运行,因此不需要代理转发( )。
- 用于
首次从命令行运行 plinks,查看是否没有其他问题。通常,您会得到一个“传入数据包在解密时出现乱码“错误,如果 plink 要求您导入 jHost 的 SSH 密钥。
jHost
注意和的用法jIP
。jHost
我的意思是逻辑主机名用于 plink 的“known_hosts”键查找(Windows 注册表中的 PuTTY 存储)。jIP
是从当前跃点可访问的下一跳的名称/IP。(您通常是从无法解析的其他网络连接jHost
。)- 外部 plink 可以简单使用,
jHost2
因为连接是代理的,并且根本没有 DNS 查找。 - 内部 plink 必须使用
jIP1
进行连接,-loghost jHost1
以进行本地密钥查找并将-nc jIP2:jPort2
NetCat 连接到下一跳。
- 外部 plink 可以简单使用,
如果你需要使用TCP 转发在目标(必须允许)上,您唯一需要做的就是在 PuTTY 中将其配置为根本没有跳转主机。这是因为到目标的 SSH 连接通过 jHost2 建立隧道,而此连接又通过 jHost1 建立,而跳转主机无法洞察隧道。
- 与仅仅通过 ssh 访问跳转主机并再次运行 ssh 到达目的地相反,您需要使用
<enter>~C<enter>
序列转至跳转主机的 ssh 客户端并使用-L
/-R
命令动态添加隧道。
- 与仅仅通过 ssh 访问跳转主机并再次运行 ssh 到达目的地相反,您需要使用
无 TCP 转发
plink -nc
(ssh -W
等效)是一个通过跳转主机 TCP 转发其标准 I/O 的本地代理。如果您无法在跳转主机上允许 TCP 转发,作为一种有限的解决方法,您可以 ssh 并在“连接 -> SSH -> 远程命令”中jHost1
使用,ssh user2@jHost2 -t ssh user@Destination
而无需代理设置。
这样,您就可以在跳转主机上启动一个新的 ssh 客户端(并且必须存在密钥/重新输入密码/转发代理、复制配置/known_hosts...)。