首先,这是可能的吗? 考虑以下设置:
一个面向公众的“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并将其发送到服务器。 相反..
只有这样才能进行身份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
所以要解决这个问题:
根据你为什么要设置这个,也许我可以提出一些替代解决scheme:
如果您只想要别名,以便用户必须记住不同的信息,请使用DNS和cname,以便hostn.bouncer.mydomain.tld将用户发送到他们打算的机器。
如果您希望能够使用摇椅机器来监控stream量,则需要执行上述任一项操作。 要嗅探encryption的stream量,您必须成为一名中间人,这样您才能解密信息,然后在发送之前对其进行encryption。
林不知道,但你可以请看看sshuttle https://github.com/apenwarr/sshuttle/也许其中一个常见的用途,它可以满足您的要求。
谷歌search提供了这个解决scheme:
http://blog.gidley.co.uk/2009/03/tunnelling-ssh-over-socks-proxy.html
我觉得它简单而巧妙,不幸的是它没有解决最后的要求…
但是使用nc可能是答案。