何时使用 ssh -L 而不是 ssh -D

何时使用 ssh -L 而不是 ssh -D

我想不出任何使用ssh -L比使用更好的用例ssh -D。我知道ssh -R对于某些网络设置来说确实很有用,但似乎ssh -D可以做任何事情ssh -L

但是,我们已经有了这个选项-L,并且对于某些情况来说,它一定是更好的(或唯一的)解决方案,对吧?

答案1

简单的答案是并非所有程序都支持 SOCKS,这是使用 所必需的-D。它们中的绝大多数要么仅支持 HTTP CONNECT 代理,要么根本没有代理设置——它们只需要一个地址和端口即可直接访问服务器,仅此而已。

为了能够使用这些程序ssh -D,您将需要一个中间层,当这些程序想要连接到某个地方时,该中间层可以代表这些程序使用 SOCKS。

当然,这样的层是存在的,但现在你添加了两个相互抵消的额外层。在许多情况下,程序只需要通过隧道联系一个主机,这只是不必要的复杂性。

答案2

本地 TCP 转发可用于将 Unix 域套接字从远程主机转发到本地。当您想要连接到数据库时,这非常有用,该数据库仅公开本地套接字,而不是 TCP 端口,并且您想要安全地访问它。您无法使用 SOCKS 代理来做到这一点。

例子:

ssh ­-L /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock ­mysql-server

相关内容