“本地端口转发”和“动态端口转发”之间的区别?

“本地端口转发”和“动态端口转发”之间的区别?

我想了解“本地端口转发”和“动态端口转发”之间的区别。

在“本地端口转发”的ssh命令中,是否总是需要指定目的主机?

“动态端口转发”中的“dynamic”是否意味着,在“动态端口转发”的ssh命令中,不需要指定目的主机?如果有,指定的目的地是什么时候?

答案1

是的,使用本地转发时必须指定目标IP和端口。从man ssh:

 -L [bind_address:]port:host:hostport
         Specifies that the given port on the local (client) host is to be
         forwarded to the given host and port on the remote side.

显然,只有绑定地址是可选的。

不可以,使用动态转发时不能指定目标主机或端口。在动态转发中,SSH充当SOCKS代理。再次来自联机帮助页(强调我的):


 -D [bind_address:]port
         Specifies a local “dynamic” application-level port forwarding.
         This works by allocating a socket to listen to port on the local
         side, optionally bound to the specified bind_address.  Whenever a
         connection is made to this port, the connection is forwarded over
         the secure channel, and the application protocol is then used to
         determine where to connect to from the remote machine.  Currently
         the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
         as a SOCKS server.

使用 时-L,SSH 不会尝试了解流量。它只是将本地端口上收到的所有内容发送到目标端口 - 您在建立连接时确定目标端口。通过-DSSH,SSH 充当代理服务器,因此可以处理来自多个端口的连接(例如,配置为将其用作 SOCKS 代理的浏览器可以通过同一连接访问 HTTP、HTTPS、FTP 等)。与其他代理服务器一样,它将使用流量来确定目的地。

答案2

学习此概念的另一种方法是查看客户端如何连接到亚马逊的弹性地图缩减(EMR)集群。 EMR 有许多公开的本地应用程序,这些应用程序通常通过 SSH 隧道访问。

客户端有 2 个选项: A) 本地端口转发 SSH 命令:ssh -i key.pem -L 8157:abcd:8088[电子邮件受保护]

例如,客户端表示本地主机上的 8157 被转发到 abcd:8088 客户端必须向本地主机发出请求: http://本地主机:8157 其他应用程序可能正在侦听 8089,8090 等端口,并且客户端必须为每个端口建立 ssh 连接。

B) 动态端口转发 这里使用单个 SSH 命令:ssh -i key.pem -D 8157[电子邮件受保护]

进入端口 8157 的任何流量都将通过 ssh 隧道进行路由。流量的目的地将是 URL 的目的地。例如,您可以在 Web 服务器上使用代理客户端并重定向某些 http URI 以使用代理。您可以通过单个命令访问 8089,8090 上的所有应用程序。

作为参考,请参阅此文档: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

相关内容