Android 上有一款很棒的应用,名为“Juice SSH”。它具有一项很棒的功能,您可以分层连接服务器,这使得通过多台服务器建立隧道变得非常简单。
例如,您定义一个连接ThisMachine -> A
。我们称此连接/配置文件为“Alpha”。然后,您可以定义连接 的 Beta ThisMachine -> B
。您只需告诉它使用 Alpha 进行该连接,它就会无缝地建立连接 。ThisMachine -> A -> B
然后,您可以将连接 Charlie 定义为ThisMachine -> C
,然后告诉它“使用 Beta”。然后它将自动连接到ThisMachine -> A -> B -> C
。该链可以任意长。
您甚至可以使用 Alpha、Beta 或 Charlie 在端口上建立隧道或 SOCKS 代理,并以您想要的任意路径建立!
多么棒的功能!我不用考虑就可以用它连接 5 个服务器。如果 ssh 可以完成这项工作,为什么还要创建 VPN?!
有没有办法使用 Putty 或 Windows 上的任何其他类似软件来做到这一点?
编辑:从评论中我看到的内容来看,似乎存在误解。我知道 ssh 隧道。我知道如何在 putty 中创建它们每个连接(我将其用于各种应用程序,例如安全 VNC),问题是每个连接都存在问题。我正在寻找的是自动多级或分层隧道。
答案1
这是可能的使用其他 SSH 客户端来实现,只是更加繁琐 - 例如使用 PuTTY(或其命令行对应部分plink
),您必须手动启动与 A 的连接,然后与 B 连接,然后与 C 连接(或者反过来?我不是 100% 理解。)
在 PuTTY 中,这可能可以通过 GUI 保存连接配置文件并通过 plink 加载它们来实现。
例如配置PuTTY连接主机A,并将其保存为“hostA”。
然后配置PuTTY连接到主机B并指定以下“Telnet或本地代理命令” - 然后将配置文件保存为“hostB”:
plink -nc %host %port -load hostA
配置 PuTTY 以连接到主机 C 并指定相同的代理命令,但要使其加载“hostB”配置文件。保存这配置文件为“hostC”...
OpenSSH(也适用于 Windows)允许通过在 ~/.ssh/config 中为每个服务器配置“ProxyCommand”来执行相同操作,这样ssh C
就不会创建直接 TCP 连接,而是使用给定的命令(在本例中恰好是通过 B 的基于 SSH 的 TCP 隧道):
将其放入 ~/.ssh/config (在 Windows 中也是相同的位置):
Host thisHost ProxyCommand ssh -W %h:%p hostA Host hostA ProxyCommand ssh -W %h:%p hostB Host hostB ProxyCommand ssh -W %h:%p hostC
现在运行
ssh thisHost
将产生三个嵌套的ProxyCommands。
然而,OpenSSH 最近还添加了“代理跳转“选项可以自动执行命令甚至链接:
该选项单独用作代理命令的
-J
快捷方式:ssh -W
ssh -J hostB hostA
但它也直接接受以逗号分隔的主机列表:
ssh -J hostA,hostB,hostC hostD
~/.ssh/config 设置看起来几乎相同:
Host thismachine ProxyJump hostA,hostB,hostC