Answers:
是的,使用本地转发时必须指定目标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不会尝试了解流量。它只是将在本地端口上接收到的所有内容发送到目标端口-您在建立连接时确定目标端口。使用时-D
,SSH充当代理服务器,因此可以处理来自多个端口的连接(例如,配置为将其用作SOCKS代理的浏览器可以通过同一连接访问HTTP,HTTPS,FTP等)。与其他代理服务器一样,它将使用流量来确定目的地。
-D
,它具有对,以了解在哪里发送数据。
学习此概念的另一种方法是查看客户端如何连接到亚马逊的弹性地图缩小(EMR)集群。EMR公开了很多本地应用程序,这些应用程序通常可以通过SSH隧道访问。
客户端有2个选项:A)本地端口转发SSH命令:ssh -i key.pem -L 8157:abcd:8088 hadoop @ abcd
例如,这里的客户端说,本地主机上的8157被转发到abcd:8088客户端必须向本地主机发出请求: http:// localhost:8157 其他应用程序可能正在监听8089,8090等端口,并且客户端必须为每个连接建立ssh连接。
B)动态端口转发这里使用单个SSH命令:ssh -i key.pem -D 8157 hadoop @ abcd
端口8157上流入的所有流量都将通过ssh隧道进行路由。流量的目的地将是URL的目的地。例如,您可以在Web服务器上使用代理客户端,并重定向一些http URI以使用代理。您可以通过单个命令访问8089,8090上的所有应用程序。
作为参考,请参阅以下文档:https : //docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html