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

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

有没有办法强制 OpenSSH(或创建某种代理)仅通过他(或她)提供的用户名将一个用户转发到一台机器,将另一个用户转发到另一台机器?

我遇到了以下问题:我将在 Docker 容器中运行 GitLab,同时在主机上运行 SSH 服务器。GitLab 监听 SSH 连接,但它只对“git”用户通过 SSH 密钥区分客户端感兴趣。因此,我想要创建的设置是以下任一设置:

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

需要明确的是:Docker 容器运行一个网桥,可以通过不同于主机 IP 的唯一 IP 地址从主机访问它。

StackOverflow 上有一个类似的问题被问到(https://stackoverflow.com/questions/8505445/setup-ssh-server-to-forward-connections),但没有答案可以解决这个问题——最有帮助的是建议自定义 shell,但我发现没有办法创建这样的东西。

答案1

SSH TCP 端口隧道由 ssh 客户端配置。在服务器上,您只能使用permitopen=host:portauthorized_keys 来限制隧道配置。

重定向流量的另一种方法是使用带有-m owner --uid-owner $UIDDNAT 目标的 Netfilter/iptables。

相关内容