通过多个主机使用 SSH 作为 socks 代理

通过多个主机使用 SSH 作为 socks 代理

以下可以通过 SSH 实现吗?

涉及三台机器:

A. My local machine at home
B. The SSH gateway server at school
C. A workstation in a lab, only reachable through B

我想设置一个 SOCKS 代理。我希望能够在家里的本地计算机上浏览网页,就像在实验室一样。这是因为有些网站只能通过学校的公共 IP 访问。

所以我想在主机 C 上运行 SOCKS 代理。但我无法让它在主机 A 上工作。

我连接到网关,并从网关连接到工作站。但我无法让网关正确地传输来自代理的流量和向代理传输流量。

我怎样才能做到这一点?

答案1

三种略有不同的方法。(将 $PORTX 和 $PORTY 替换为您选择的端口号。)

第一种方法:ProxyCommand

machine-a$ ssh -f -N -D $PORT -oProxyCommand="ssh -W %h:%p machine-b" machine-c

第二种方法:

  1. 从 A 连接到 B,并使用 的“本地转发$PORT” 。localhost:$PORT

    machine-a$ ssh -L $PORT:localhost:$PORT machine-b
    
  2. 从 B 连接到 C,并启用“动态转发”。

    machine-b$ ssh -f -N -D $PORT machine-c
    
  3. 配置您的浏览器以使用代理。localhost:$PORT

步骤 1 和步骤 2 可以概括为:

ssh -f -L $PORT:localhost:$PORT machine-b "ssh -f -N -D $PORT machine-c"

第三种方法:

  1. 从 A 连接到 B,并使用 的“本地转发$PORTXmachine-c:22

    machine-a$ ssh -f -N -L $PORTX:machine-c:22 machine-b
    
  2. 通过隧道从 A 连接到 C,使用“动态转发”。

    machine-a$ ssh -f -N -D $PORTY localhost -p $PORTX
    

    -f -N(如果您也想使用相同的隧道进行交互式连接,则可以省略。)

  3. 配置您的浏览器以使用代理。localhost:$PORTY

答案2

对于 AWS EMR Sock Proxy,以下是应用的步骤。假设我们有两个跳转场景,如下所示

[your-laptop] --<ssh key1>--> [Jump-Box] --<ssh key2>--> [EMR-Master]

你已经设置福克斯代理在您的浏览器中。在开始步骤之前激活它。

步骤 1. 登录 Jump Box

ssh -i ~/.ssh/key1 ec2-用户@

第 2 步。在跳转框上设置动态隧道,假设 Key2 存在。

ssh -i ~/key2 -N -D 8157 hadoop @

步骤3.在 ssh 客户端上打开一个新的控制台并设置隧道。

ssh -i ~/.ssh/key1 -L 8157:localhost:8157 ec2-user@ -N

相关内容