使用单个端口的多个反向SSH隧道

我能够在一台服务器上使用一个端口接收来自多个远程系统的反向SSH连接:

Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22 Remote B: ssh -fN -R5001:localhost:22 user@server-ip -p22 Remote C: ssh -fN -R5002:localhost:22 user@server-ip -p22 

我可以根据需要从本地客户端访问这些系统:

 Access Remote A: ssh root@server-ip -p5000 Access Remote B: ssh root@server-ip -p5001 

这需要转发服务器上每个远程系统的一个端口。 当100多个遥控器连接时,除了在服务器防火墙中打开100多个端口以外,还有其他的select,并将每个远程端口静态分配给上述端口? 我的目标是使多个遥控器按需创build隧道,在那里我可以查询谁连接。

我发现sslh是一个多路复用器,可以区分基于协议的单个端口上的stream量,但这只适用于不同的协议,例如。 SSL / SSH。 有一个解决scheme,允许单个端口上的多个隧道?

例:

 Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier abc123 Remote B: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier def456 access Remote A: ssh root@server-ip -p5000 -identifier abc123 access Remote B: ssh root@server-ip -p5000 -identifier def456 

我有同样的问题,到时候,只有一个可能的答案。 我的场景和你的场景有些不同,因为我只需要一个活动的ssh隧道,但是如果需要,所有的客户端都必须准备好连接。

我想可以创build一个客户端/服务器简单的协议来处理所有的客户端,并创build一个列表。 用户然后可以select其中一个客户端来创build反向隧道。 这样做将需要另一个开放的端口,而不是ssh服务器,但使用线程服务器可以监听()到同一端口下的各种客户端的这个辅助协议。

我仍然在研究一个解决scheme(我可能会实现我刚刚写的),但是请注意,您应该决定一次连接的最大客户端数量,并configuration该端口数量。 由于我的embedded式设备只是一个小型的linux“支持”,所以我一次只能在一个设备上工作,所以我只需要一个设备。

一个聪明的想法是通过辅助协议通知客户端在哪个服务器端口附加反向隧道。