SSH反弹框与透明转发到后端主机

首先,这是可能的吗? 考虑以下设置:

一个面向公众的“SSH反弹盒”

bouncer.mydomain.tld 

四个私人* nix系统

 host1.mynet.local host2.mynet.local host3.mynet.local host4.mynet.local 

所有在端口22上运行Open-SSH。每个私有系统都有其唯一的根密码和唯一的用户。

我希望能够以root身份loginhost1.mynet.local:

 ssh [email protected] 

以上将使用SSH反弹框以root身份login到host1.mynet.local SSH,而无需手动设置隧道。

另外,请考虑以下可能性:

 ssh [email protected] 

这应该连接到host3.mynet.local作为用户janet。 最后一个“_”将用户名与主机标识符分开。

问题是这对最终用户应该是完全透明的。 这意味着工作完成服务器端而不是客户端。 最终用户不需要编辑configuration文件,安装隧道,或者编辑.ssh / config文件来使其工作。

我将首先描述一个[不幸,哈克但易于设置]的解决scheme。 然后我会描述为什么我不认为你所描述的确实很容易。


bouncer.mydomain.ltd中的机器将为每个用户/主机元组拥有一个用户。 在保镖机器上的每个用户将有一个.bashrc:

 ssh [email protected]
出口

此外,来自每个用户的保镖机器的公钥可以放置在相应主机的预期用户的authorized_keys目录中。

这样做的失败是信息是多余的,对特定主机的任何改变都不会传播(除非你引入一些黑客脚本)


以前的解决scheme实际上是从ssh连接的shell打开的ssh连接。 我认为你真的想象的是一个更像是一个反向代理,根据你放在用户区域的路由。

不幸的是,很难提取该用户区域信息。 (而且没有我知道的软件已经这样做了)当你input

 ssh [email protected]

SSH不会立即提取janet_host3并将其发送到服务器。 相反..

  • SSH客户端和服务器通过密钥和algorithm进行协商
  • 客户端/服务器build立一个安全的(encryption的)通信信道

只有这样才能进行身份validation。 通过encryption通道。

重要的是要注意, 你的服务器不能知道哪个机器代理连接信息,直到一些通信完成之后

作为参考,以下是一些服务器收到的第一条信息的示例(我将ssh运行到本地主机)。

 SSH-2.0-OpenSSH_6.0p1 Debian-3ubuntu1
 ......%{AQ.3 .... *〜\ ..... ECDH-SHA2-nistp256,ECDH-SHA2-nistp384,ECDH-SHA2-nistp521,的Diffie-Hellman群交换-SHA256 ,的Diffie-Hellman组-EX

所以要解决这个问题:

  • 您的服务器将不得不通过传输阶段进行协商,build立encryption通信通道,然后狙击用户信息。
  • 然后,它可以parsing用户信息并build立与预期目的地的新连接。
  • 在此之后,它可以汇集客户端发送的所有内容,以及客户端从目标服务器上的所有内容。

根据你为什么要设置这个,也许我可以提出一些替代解决scheme:

  • 如果您只想要别名,以便用户必须记住不同的信息,请使用DNS和cname,以便hostn.bouncer.mydomain.tld将用户发送到他们打算的机器。

  • 如果您希望能够使用摇椅机器来监控stream量,则需要执行上述任一项操作。 要嗅探encryption的stream量,您必须成为一名中间人,这样您才能解密信息,然后在发送之前对其进行encryption。

谷歌search提供了这个解决scheme:

http://blog.gidley.co.uk/2009/03/tunnelling-ssh-over-socks-proxy.html

我觉得它简单而巧妙,不幸的是它没有解决最后的要求…

但是使用nc可能是答案。