我似乎无法弄清楚 ssh 选项 -L -D -W 和 -w 之间的区别。它们似乎都提供了一些隧道的变化,但我对网络不太精通,并且联机帮助页没有提供很多。有人可以指出我对此的彻底外行解释的方向,还是在这里提供一个?
ssh隧道和转发选项的解释
以下是一些示例用例。我用过第一个和第二个,我想我理解第三个。最后一个对我来说是新的,但这似乎大致适合它。
ssh -D 1234 tess@remotecomputer
连接到远程计算机并以我的身份登录。
SSH 客户端在我的本地工作站上打开端口 1234 并开始作为SOCKS代理进行侦听。
我在本地工作站上打开 FireFox 并将其配置为使用 SOCKS 代理“localhost:1234”。
浏览网页,Firefox 连接到我的本地工作站端口 1234,SSH 客户端接受连接。通过 SSH 隧道将流量传递到远程计算机。远程计算机上的 SSH 服务器将流量发送到我想要访问的任何目标网站(即“动态”目标)。
返回流量返回到远程计算机上的 SSH 服务器,后者通过 SSH 连接返回,SSH 客户端将其返回给 FireFox。
只有可以使用 SOCKS 协议作为代理的应用程序才能使用此方法,但它们可以使用它连接到任何地方。
ssh -L 1234:server2:3389 tess@remotecomputer
连接到远程计算机并以我的身份登录。
SSH 客户端在我的本地工作站上打开端口 1234 作为基本 TCP 网络侦听套接字。
我在本地工作站上打开远程桌面客户端并连接到localhost:1234
SSH 客户端应答连接并通过 SSH 隧道发送数据。
远程计算机上的 SSH 服务器将流量发送到server2端口3389(远程桌面端口)。返回流量返回 SSH 服务器并通过 SSH 隧道返回到 RDP 客户端。
这种配置不是动态的,流量只能到我在命令行中指定的主机和端口——但是几乎任何使用标准 TCP/IP 的程序都可以使用这种方法通过 SSH 隧道进行连接。
ssh -W 邮件:25 tess@remotecomputer
连接到远程计算机并以我的身份进行身份验证,但不要登录 - 不要启动 bash shell,不要运行任何登录脚本。
从远程计算机上的 SSH 服务器打开 TCP 连接以托管“邮件”端口 25 (SMTP)
通过 SSH 隧道将我键入的任何内容(或来自我的标准输入的任何内容)发送到远程计算机,然后发送到“邮件”上的 SMTP 侦听器。
它返回的任何内容都会返回到远程计算机上的 SSH 服务器,通过 SSH 隧道返回并直接返回到我的屏幕/标准输出。
这种方法是在本地隧道隧道 unix 管道,并将它们连接到远程端的网络套接字。
ssh -w 5:5 tess@remotetecomputer
连接到远程计算机并以我的身份登录。
我本地工作站上的 SSH 客户端创建了一个新的虚拟网络接口,就像 eth0 是一个物理网络接口。新的称为 tun5。
我可以像任何其他接口一样配置 tun5,给它一个 IP 地址。
remotecompter 上的 SSH 服务器还创建了一个新的虚拟网络接口 tun5,我可以对其进行配置。
将它们都配置在同一子网上,它们可以通过 SSH 隧道进行 IP 通信。
现在我可以和它们一起使用路由,使用防火墙规则,它看起来像是两台计算机/两侧之间的 VPN,但需要在计算机上进行更多配置(例如 IP 路由)才能使用。-D 动态转发和 -L any-network-program-can-use-this-limited-forwarding 的综合优势。