如何创建反向动态 ssh 端口转发

如何创建反向动态 ssh 端口转发

我正在尝试设置 ssh 隧道布局,其中:

  1. 客户端 A(未启用 ssh 服务器)发起与服务器 S 的 ssh 连接
  2. ocks 服务器在服务器 S:yyyy 上打开,通过客户端 A 传输所有数据
  3. 客户端B连接服务器S上的socks服务器,tcp数据通过客户端A路由到互联网

一种可能的解决方案是在客户端 A 上添加代理服务器(绑定到 localhost:xxxx),然后在客户端 A 上运行ssh -R yyyy:localhost:xxxx Server。这样就可以达到目的了。但这并不像只使用 ssh 那样干净。

是否可以仅使用 A 上的 ssh 客户端和 S 上的 ssh 服务器来实现此目的?这就像 ssh 上的反向动态端口转发 - 创建ssh -D从 A 到 S,然后以某种方式在此隧道上设置ssh -D从 S 到 A 的第二条隧道。有点令人困惑,不确定是否可能。

答案1

OpenSSH 7.6引入反向动态代理作为本机选项。完全在客户端实现,所以服务器端不需要更新。

ssh -R 1080 server

答案2

我只是在寻找这个并遇到了相同(或类似)的问题堆栈溢出

在客户端 A 上ssh -R \*:24680:localhost:12345 serverS然后(仍然在客户端 A 上)ssh -D 12345 localhost[1]

需要到位\*,因此它将绑定到服务器 S 的公共 IP 地址,而不仅仅是本地主机。

然后在客户端B上只需连接到socks服务器serverS:24680


[1] 编辑:我刚刚意识到,如果客户端 A 没有 SSH 服务器,这将不起作用,因为它本身无法 ssh。我正在考虑一种设置,其中客户端 A 有一个 SSH 服务器,但服务器 S 无法访问该设置。但是如果您可以安装一个类似的设置,那么类似的设置仍然可以工作袜子服务器在客户端 A 上并在端口 12345 上打开它。

答案3

不知道这是否对任何人有帮助,这是我设法构建的设置图表......

带有 SOCKS 代理的 SSH 反向隧道

您将在 MACHINE_B 上看到两个进程:

与 MACHINE_A 的 SSH 客户端连接(橄榄色):

ssh -R 127.0.0.1:22344:127.0.0.1:4444 -i privkey.sshkey -N user_a@machine_a

SSH 客户端作为 SOCKS 服务器在端口 4444 上工作(深绿色):

ssh -D localhost:4444 -N user_c@localhost

MACHINE_A 上有一个进程,该播放服务器监听端口 22344(橄榄色)。

当 MACHINE_A 上的浅绿色进程请求连接时,MACHINE_B 上的浅绿色进程应该出现...

答案4

这非常简单。

在本地端(服务器 S),启动 openssh 服务器。默认情况下,这将在端口 22 上启动 ssh 服务器 - 如果需要,您可以在 /etc/ssh/sshd_config 文件中更改此端口。

 service ssh start

在远程端(客户端A),启动socks代理并在本地设置远程端口以连接到socks代理。

 ssh -N -D 127.0.0.1:8888 -p 22 <server-s>
 ssh -N -R 2222:127.0.0.1:8888 -p 22 <server-s>

在本地端(服务器S),通过例如在端口2222上使用socks代理设置来连接到Google。

 curl --socks5 127.0.0.1:2222 https://www.google.com

相关内容