SSH作为通过多个主机的袜子代理


21

可以使用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上运行。

我连接到网关,然后从网关连接到工作站。但是我无法使网关将流量正确地从代理传输到代理。

我怎样才能做到这一点?

Answers:


28

三种略有不同的方法。(用您选择的端口号替换$ 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


1
太好了,谢谢!我希望我可以再给+1以使它成为一个班轮!
jwbensley 2012年

2

对于AWS EMR Sock代理,以下是应用的步骤。假设我们有以下两种情况

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

并且您已经在浏览器中设置了FoxyProxy。在开始步骤之前,先激活它。

步骤1.登录跳转框

ssh -i〜/ .ssh / key1 ec2-user @

步骤2.假设其中存在Key2,则在Jump框上设置动态隧道。

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.