SSH动态转发(-D)如何在后台运行?

时间:2018-07-15 10:46:30

标签: ssh

SSH动态转发(-D)如何在后台运行?

我了解到SSH动态转发会在本地主机上打开一个SOCSK4代理,并且与SOCK4代理的每个连接都会通过SSH隧道转发到远程目标。

SSH是否拦截与SOCKS4代理的连接?我的意思是,它不能是“普通” SOCKS4代理,因为那样的话,它将直接代理与远程主机的连接。

此外,SSH如何处理来自远程主机的响应,即,如何将其通过SSH隧道传输回本地主机上的收件人?

1 个答案:

答案 0 :(得分:1)

给出-D标志时,SSH客户端将启动内置的SOCKS4 / 5代理。 (请注意:“ SOCKS ”,而不是“ SOCK ”)。

-D [bind_address:]port
     

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

当另一个应用程序希望连接到代理服务时,它们将通过此SOCKS服务器建立连接。 SOCKS协议是在连接开始时进行的一些协商,例如:(inspired by the wiki page

  1. ssh -D 1234 user@remote被执行,SSH客户端启动侦听端口1234的SOCKS代理服务器。
  2. 本地应用程序希望通过SOCKS代理与服务进行通信,因此连接到端口1234。
  3. SOCKS客户端请求与特定IP地址和端口的连接-例如:66.102.7.99,端口4321。
  4. SOCKS服务器(在本例中为SSH客户端)将协商与其服务器(remote,从上方)建立此向前的连接。这可能会失败。
  5. SOCKS服务将以成功/失败信息响应客户。
  6. 如果成功,则现在将适当转发通过此套接字传递的所有数据:
    • 从本地应用程序到SSH服务器(remote),然后到66.102.7.99
    • 66.102.7.99到SSH服务器(remote),然后到本地SSH客户端,最后到本地应用程序。

  

SSH是否会拦截与SOCK4代理的连接?

否,SSH客户端 SOCKS代理。

  

我的意思是,它不能是“常规” SOCK4代理,因为那样的话,它将直接代理与远程主机的连接。

我想这不是真的-SSH客户端和服务器一起执行 来实现“ 普通” SOCKS代理的功能。高层的结果是,代理在一个主机上侦听,但从另一个主机转发数据,并且它们之间具有神奇的链接。

  

此外,SSH如何处理来自远程主机的响应,即,如何将其通过SSH隧道传输回本地主机上的收件人?

TCP是一种面向连接的通信方法。也就是说,一旦建立连接,数据就可以在两个方向上流动,并被可靠地标识为“与该连接有关的 ”。借助此信息,将数据与任意规则(例如“ 转发到SSH服务器,SSH服务器将转发到66.102.7.99 ”)联系起来很简单。