ssh -L 到 -D 之间的差异

61 ssh port-forwarding ssh-tunnel

我试图了解 ssh -L 到 -D 之间的差异。除了 -D 仅是 SOCKS 之外还有什么吗?

谢谢!

Jes*_*hia 63

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 服务器而不是从计算机浏览一样。

  • 关于 -L 的一个重要细节是,您可以绑定一个仅供本地使用的本地端口,例如 localhost:80:remotehost:8080,但您也可以为其他任何人绑定该端口。因此,您可以让本地网络中的机器通过隧道提供对远程机器的访问,而无需任何本地机器知道这一点。 (7认同)
  • `ssh -L 4444:google.com:80` 对我不起作用,它需要另一个登录参数,例如 user@example.com (2认同)

Mug*_*hil 6

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

SSH -D [bind_address:]port
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

SSH -L [bind_address:]port:host:hostport
Run Code Online (Sandbox Code Playgroud)

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

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