我正在尝试了解 ssh -L 和 -D 之间的区别。除了 -D 仅适用于 SOCKS 之外,还有其他什么吗?
谢谢!
答案1
ssh -L
打开本地端口。您发送到该端口的所有内容都将通过 ssh 连接并通过服务器离开。如果您这样做,例如,ssh -L 4444:google.com:80
如果您http://localhost:4444
在浏览器上打开,您实际上会看到 google 的页面。
ssh -D
打开本地端口,但它没有像 那样的特定端点-L
。相反,它假装是 SOCKS 代理。如果您打开,例如ssh -D 7777
,当您告诉浏览器将localhost:7777
其用作 SOCKS 代理时,浏览器请求的所有内容都会通过 ssh 隧道。对于公共互联网,就好像您是从 ssh 服务器而不是从计算机浏览一样。
答案2
在 SSH 中,-D
指定本地“动态”应用程序级端口转发。
SSH -D [bind_address:]port
指定本地“动态”应用程序级端口转发。它通过分配套接字来监听本地端口,可选择绑定到指定的 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
指定本地(客户端)主机上的给定端口将转发到远程端的给定主机和端口。这通过分配一个套接字来监听本地端的端口(可选绑定到指定的 bind_address)来实现。每当连接到此端口时,连接都会通过安全通道转发,并从远程计算机连接到主机端口 hostport。端口转发也可以在配置文件中指定。可以使用替代语法指定 IPv6 地址:[bind_address/]port/host/hostport 或将地址括在方括号中。
只有超级用户可以转发特权端口。默认情况下,本地端口根据 GatewayPorts 设置进行绑定。但是,可以使用显式 bind_address 将连接绑定到特定地址。“localhost”的 bind_address 表示侦听端口仅绑定供本地使用,而空地址或“*”表示该端口应可从所有接口使用。