我希望在 Windows 服务器和客户端之间建立一个无需端口转发的 ssh 隧道。
我知道用于建立带有端口转发的隧道的命令,但我只有一个服务器和一个客户端,所以无法使用转发。
ssh user@serverip -L 5900:localhost:5900
当我使用此命令时,我的 vnc 会话不会通过隧道。因此,我希望避免使用端口转发。
我一直在参考本指南,根据它,我的 vnc 应该可以通过隧道。https://websistent.com/how-to-use-putty-to-create-a-ssh-tunnel/
但我希望在没有端口转发的情况下做同样的事情。
使用上述命令我面对的是环回接口。
谢谢!!
答案1
我感觉到了混乱和可能存在的误解。
当您使用以下命令建立 SSH 隧道时:
ssh user@server -L 5900:localhost:5900
...发生了以下事情:
- 当然,SSH 连接已经建立并经过验证。
- SSH 客户端将设置 TCP 端口转发隧道,用于侦听本地客户端系统上的传入连接(
-L
) - 隧道的监听端将位于系统的 5900 端口(=第一个
5900
) - 加密隧道将从您的本地客户端系统到
server
系统 - 系统上的隧道输出端
server
将再次以原始的未加密形式传递流量,以localhost:5900
系统server
认为。这不是localhost
你本地系统的,而是系统localhost
的server
。
这就是为什么你的句子“但我只有一个服务器和一个客户端,所以不能使用转发”毫无意义。你总是可以将内容从本地系统的 localhost 转发到远程系统的 localhost(反之亦然,使用-R
而不是-L
)。
端口转发是 SSH 可用于保护其他没有内置 SSH 支持或任何特殊接口的程序的原因。
要成功使用隧道,您必须了解,现在可以server
通过连接到客户端系统的本地端口 5900 来访问 的端口 5900。换句话说,您必须告诉 VNC 客户端连接到使用加密隧道localhost:5900
连接到。如果您告诉 VNC 客户端连接到,则表示您告诉它绕过您为其设置的隧道,直接连接,而无需使用 SSH 加密。server
server:5900
您还说您不想使用端口转发。那么,无论您的 VNC(或任何其他)客户端是什么,都必须有更复杂的方法来使用 SSH 提供的隧道。据我所知,有两种可能性:
SOCKS4/SOCKS5 代理支持:你与
ssh 用户@服务器-D 1234
现在,SSH 客户端将在本地系统的端口 1234 中设置 SOCKS 代理。进入该代理的所有流量将首先通过加密的 SSH 隧道到达系统server
,然后从那里(再次以未加密的形式)到达 VNC(或其他)客户端请求的任何目的地。当然,VNC(或其他)客户端必须可配置为支持 SOCKS4 或 SOCKS5,并且您必须将其配置为使用 SOCKS 代理才能localhost:1234
使用 SSH 隧道。
- 另一种选择是完全集成到 SSH 客户端。为了使用 SSH 隧道而不使用任何类型的代理或端口转发,VNC(或其他)客户端必须包含 SSH 功能,以便它可以直接从其自己的程序代码中使用 SSH 隧道,并有效地使用远程服务器
sshd
作为其自身的扩展器,以从那里建立到任何地方的网络连接。