使SSH服务器转发每个用户的连接

有没有办法强制OpenSSH(或创build某种types的代理)转发一个用户到一台机器和另一个用户到另一台机器只是由他(她)提供的用户名?

我遇到了以下问题:我要在Docker容器中运行GitLab,同时在主机上运行SSH服务器。 GitLab侦听SSH连接,但是它只对使用SSH密钥的“git”用户识别客户端感兴趣。 所以我想创build的设置是以下任一个:

  1. 在主机上的端口22上的代理,当提供的用户是“git”或主机SSH(可能监听另一个端口,重要的是客户端不知道这一点)时,将整个会话转发到Docker Gitlab。不同。
  2. 主机SSH处理除“git”之外的所有用户,并在用户名为“git”时将会话转发到Docker容器。

只是要清楚:Docker容器运行一个网桥,它可以从主机通过与主机IP不同的唯一IP地址访问。

在StackOverflow上有一个类似的问题( https://stackoverflow.com/questions/8505445/setup-ssh-server-to-forward-connections ),但没有解决这个问题的答案 – 最有帮助的是那个build议自定义shell,但我没有办法创build类似的东西。

SSH TCP端口隧道由ssh客户端configuration。 在服务器上,只能在authorized_keys中使用permitopen=host:port来限制隧道configuration。

另一种redirectstream量的方法是使用Netfilter / iptables和-m owner --uid-owner $UID和DNAT目标。