ssh -L与-D之间的区别


52

我试图了解ssh -L与-D之间的区别。除了-D仅是SOCKS以外,还有其他内容吗?

谢谢!

Answers:


53

ssh -L打开一个本地端口。您发送到该端口的所有内容均通过ssh连接放置,并通过服务器保留。如果您这样做了,例如,ssh -L 4444:google.com:80如果http://localhost:4444在浏览器中打开,则实际上会看到Google的页面。

ssh -D打开一个本地端口,但是没有特定的端点,例如with -L。相反,它伪装成SOCKS代理。如果打开(例如)ssh -D 7777,当您告诉浏览器localhost:7777用作SOCKS代理时,浏览器请求的所有内容都会通过ssh隧道。到公共互联网,就好像您是从ssh服务器而不是从计算机浏览一样。


6
关于-L的一个重要细节是,您可以绑定仅本地使用的本地端口,例如localhost:80:remotehost:8080,但是您也可以为其他任何人绑定该端口。因此,您可以使本地网络中的计算机通过隧道提供对远程计算机的访问,而无需任何本地计算机知道这一点。
dividebyzero

@dividebyzero我在描绘您所描述的内容时遇到了麻烦
Michael Dorst,

@MichaelDorst我的意思是从手册页上看到这句话:The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.
Divedbyzero

ssh -L 4444:google.com:80不适用于我,它需要另一个参数来登录,例如user@example.com
Saman Mohamadi

6

在SSH中,-D指定本地“动态”应用程序级端口转发。

SSH -D [bind_address:]port

指定本地“动态”应用程序级端口转发。这通过分配一个套接字来侦听本地端的端口(可选地绑定到指定的bind_address)而起作用。每当与此端口建立连接时,该连接都会通过安全通道转发,然后使用应用程序协议确定从远程计算机连接到的位置。当前支持SOCKS4和SOCKS5协议,并且ssh将充当SOCKS服务器。只有root可以转发特权端口。动态端口转发也可以在配置文件中指定。

可以使用另一种语法指定IPv6地址:[bind_address /] port或将地址括在方括号中。

只有超级用户可以转发特权端口。默认情况下,本地端口是根据GatewayPorts设置绑定的。但是,可以使用显式bind_address将连接绑定到特定地址。bind_address的“ localhost”表示绑定的侦听端口仅供本地使用,而空地址或“ *”表示该端口应可从所有接口使用。

另外,ssh -L指定将本地(客户端)主机上的给定端口转发到远程侧上的给定主机和端口。

SSH -L [bind_address:]port:host:hostport

指定将本地(客户端)主机上的给定端口转发到远程侧上的给定主机和端口。这是通过分配一个套接字来侦听本地端的端口(可选地绑定到指定的bind_address)来实现的。每当与此端口建立连接时,该连接都会通过安全通道转发,并且会从远程计算机建立到主机端口hostport的连接。端口转发也可以在配置文件中指定。可以使用另一种语法指定IPv6地址:[bind_address /] port / host / hostport或将地址括在方括号中。

只有超级用户可以转发特权端口。默认情况下,本地端口是根据GatewayPorts设置绑定的。但是,可以使用显式bind_address将连接绑定到特定地址。bind_address的“ localhost”表示绑定的侦听端口仅供本地使用,而空地址或“ *”表示该端口应可从所有接口使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.